Øvelse+5+-+LDD+with+GPIO

=Opgave 5:=

A) Koden til init og exit skrives. Det opgivne skelet bruges, og der skrives der hvor koden mangler.

Den første bid til init, er hvor der GPIOen requestes: code format="c" for (i = 0; i < gpio_len; i++) gpio_request(gpio[i].num, gpio[i].label);

if (gpio_request(138, "gpio138") < 0) printk("Error requesting GPIO %i\n", 138); code

Den næste bid er hvor GPIOens vejen skal sættes (in/out)

code format="c" for (j = 0; j < gpio_len; j++) {   if (gpio[i].dir == in) gpio_direction_input(gpio[i].num);

else gpio_direction_output(gpio[i].num, 0);

} code B) Implementer Open og Release. Igen bruges skeletet. Denne kode er ens fra både Open og Release, og der checkes om det er muligt at finde MAYOR og MINOR nummeret: code if(major != MYGPIO_MAJOR) {   return -ENODEV; } if(minor != MYGPIO_MINOR) {    return -ENODEV; } code

C) Implementer Write. Igen bruges skeletet. Lysdioden på plads 139 vælges og. Det vil sige at det kun er denne diode vi skriver til. code format="c" gpio_set_value(139, value); code D) Implementer Read, Igen bruges skeletet GPIOen aflæses: code format="c" if(gpio[minor].dir == in) result = gpio_get_value(gpio[minor].num);

code Data kopieres fra userspace til kernelspace: code format="c" if(copy_to_user(buf, readBuf, len)) return -EFAULT; code TEST: Modulet indsættes med "insmod", der laves en node med "mknod", der write testes med "echo 1 >" og der read testes med "cat" Testen gennemføres og der ses at det virker.