MPS+Ov5

I øvelsen fik vi næsten hele den kode som vi skulle bruge for at kunne implementere, vi skulle dog selv skrive read delen for koden code ssize_t mygpio_read(struct file *filep, char __user *buf,                size_t count, loff_t *f_pos) {  char readBuf[MAXLEN]; int len, result=-1, minor; int g_value;

/*    * retrieve minor from file ptr */   minor = MINOR(filep->f_dentry->d_inode->i_rdev); printk(KERN_ALERT "Reading from MyGpio [Minor] %i \n", minor);

/*    * Read GPIO port * (if an input port) */	 /*** YOUR CODE HERE ****/ if(gpio[minor].dir==in) g_value = gpio_get_value(gpio[minor].num);

/*    * Convert int to string * using sprintf */   len=sprintf(readBuf,"%i", result); len++; // To include null-termination

printk(KERN_ALERT "testBuf: %s \n", readBuf);

/*    * Copy string result * to User Space */   if(copy_to_user(buf, readBuf, len)) return -EFAULT;

*f_pos += len; return len; } code Read delen skal kunne gå ind og læser Major. Vi har gjort den dynamisk sådan at den kan skifte imellem de muligheder der er defineret i starten af koden.

Compiler vi koden og indsætter på target. Til indsættelse i kernen benyttes kommandoen insmod. Insert: code root@beagleboard:/tmp# insmod GPIO.ko 2000 Jan 1 00:03:24 beagleboard [  208.487060] Mygpio Module Inserted

code Efter at have indsat i kernen skal vi oprette en nod. Nod'en skal oprettes med Major nummer 62, da det er det nummer vi har givet den. Herefter kan den selv finde rundt i resten. create a node with major number 62: code root@beagleboard:/tmp# mknod /dev/gpio0 c 62 0

code Efter oprettelse af nod checker vi at den er blevet oprettet: Test for at den har fået nummer 62 code root@beagleboard:/tmp# ls -l /dev/gp* crw-r--r--   1 root     root       62,   0 Jan  1 00:15 /dev/gpio0

code

Som afslutning på opgaven ønsker vi at skrive til hvores driver. Dette gør vi med echo hvor vi skriver 1 til den: Tester at vi kan skrive til den code root@beagleboard:/tmp# echo 1 > /dev/gpio0 2000 Jan 1 00:16:14 beagleboard [  977.849365] Writing to MyGpio [Minor] 0 code

I opgaven har vi arbejdet med en driver der kan aktivere forskellige GPIO'er. Denne driver har vi indsat i kernen og oprettet en Nod som er kommunikationen ned til driveren, altså den der binder hardware og driveren sammen. Når vi har set at forbindelsen er blevet oprettet tester vi ved at skrive til driveren.
 * Opnået i opgaven**

code root@beagleboard:/tmp# echo 1 > /dev/gpio 2000 Jan 1 00:31:43 beagleboard [ 1907.472930] Writing to MyGpio [Minor] 0 root@beagleboard:/tmp# dmesg

code Se