ioctl funktion - hwclock



  • Hi Community

    Ich bindabei einen treiber für linux zu schreiben , und zwar den real time clock - rtc. Ich habe schon geschafft die daten in das register zu schreiben und daraus zu lesen. Schreiben per echo "TT-MM-JJJJ HH-MM-SS" > /dev/rtc , und lesen per cat /dev/rtc.

    Mein erstes Problem ist es die Daten die ich habe vom KernelSpace in den Userspace zu laden... ich habe jedes einzelne Element also TT MM JJJJ ... als eine Variable. Was muss ich jetzt machen, damit ich, wenn man cat /dev/rtc eingibt sofort auf dem Bildschirm das Datum ausgibt und ich nicht in dmesg suchen muss ? ( es sollte ürgend wie mit copy_to_user und copy_from_user gehen ich hoffe ihr könnt mir helfen )

    Mein zweites Problem ist es ich habe die rtc_ioctl funktion , die auf die befehle hwclock --set und hwclock --show reagieren soll. Wie soll ich das codieren ?
    Das ist meine funktion:

    static int rtc_ioctl( struct inode *inode, struct file *instanz,
        unsigned int cmd, unsigned long arg)
    {
        printk("ioctl called 0x%4.4x %p\n", cmd, (void *)arg );
        switch( cmd ) {
    
        }
        return 0;
    }
    

    und weiter unten habe ich meine file_operations:

    struct file_operations fops{
    .ioctl=rtc_ioctl
    };
    

    Also ich muss der ioctl ürgend wie verständlich machen, das wenn jemand in der console hwclock --show eingibt , sie dann zum beispiel meine schon fertige rtc_read aufruft... ( dass wäre nicht ganz was ich brauche aber besser als nichts )

    Ich bedanke mich im voraus , für eure Mühe ! 😉



  • hab gerade mal die datei /usr/src/linux/drivers/rtc/rtc-test.c bischen
    durchstöbert, das Struct muß zum lesen und schreiben erweitert werden?

    static struct rtc_class_ops ds1302_rtc_ops = {
    	.read_time	= ds1302_rtc_read_time,
    	.set_time	= ds1302_rtc_set_time,
    	.ioctl		= ds1302_rtc_ioctl,
    };
    

    deine Probleme mit hwclock --set usw sollten sich doch dann auch lösen?



  • http://www.sfr-fresh.com/linux/misc/hwclock-2.32.tgz:a/hwclock-2.32/hwclock.c

    z. 709 function manipulate_epoch da steht sowas wie

    get_epoch("/dev/rtc", &epoch, &reason);

    set_epoch("dev/rtc", epoch_opt, testing, &rc);



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten