最近一周粗略看了下本书的
第2章嵌入式Linux LED灯驱动开发实验
第3章 新设备驱动
字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。
LINUX应用程序对驱动的调用如图
驱动函数的编写
led_init主要是调用一些寄存器对IO进行初始化操作
led_write调用retvalue = copy_from_user(databuf, buf, cnt)来写LED管脚
copy_to_user():完成内核空间到用户空间的复制
copy_from_user():完成用户空间到内核空间的复制
led_exit
/* 注销字符设备驱动 */
unregister_chrdev(LED_MAJOR, LED_NAME);
测试APP函数重点:
比较简单,基本就是open,wrte,然后close
make -j32
编译成功以后就会生成一个名为“led.ko”的驱动模块文件
编译APP应用软件
arm-linux-gnueabihf-gcc ledApp.c -o ledApp
实际操作
开发板上电,确认开发板的IP
使用MOBAXTERM软件
登录开发板
ROOT免密登录
把编译出来的led.ko和ledApp这两个文件拷贝到rootfs/lib/modules/4.1.15目录中,
重启开发板,进入到目录 lib/modules/4.1.15
查看目录下的文件
开始测试
由于板载的LED还作为心跳等,所以先要关闭该功能在测试
/lib/modules/4.1.15 # echo none > /sys/class/leds/red/trigger
/lib/modules/4.1.15 # depmod
/lib/modules/4.1.15 # modprobe led.ko
/lib/modules/4.1.15 # mknod /dev/led c 200 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
-sh: ./ledApp: Permission denied
/lib/modules/4.1.15 # chmod 777 ledApp
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 0
/lib/modules/4.1.15 # ./ledApp /dev/led 1
/lib/modules/4.1.15 # ./ledApp /dev/led 1
/lib/modules/4.1.15 # ./ledApp /dev/led 1
/lib/modules/4.1.15 # echo none > /sys/class/leds/red/trigger
/lib/modules/4.1.15 # ./ledApp /dev/led 1
/lib/modules/4.1.15 # ./ledApp /dev/led 0
测试完成