1、Linux内核介绍
Linux内核的结构框图
从上图中我们可以看出从应用程序到控制硬件大致需要经历的步骤有:
用户程序 --> C库函数 --> 系统调用(包含了VFS)–> 字符设备 --> 硬件
2、Linux驱动实现原理
我们知道树莓派有提供关于GPIO的库,叫做WiringPi,我们只需要基于这个库就可以实现GPIO的读写操作,但是我们也可以通过阅读树莓派的芯片手册,然后编写驱动代码,一样可以实现GPIO的操作。因此,我们需要大致的了解下Linux的驱动的实现原理。
1、编写设备驱动代码,生成设备驱动文件,将设备驱动添加到内核的设备驱动链表。
2、应用程序调用设备驱动文件,通过统一的open、read、write接口来实现设备驱动的控制。
3、树莓派的字符设备驱动开发
1、分别编写好应用层的代码和设备驱动层的代码。这边注意,关于寄存器的操作都是基于位运算来实现的,如果想要某一位置1,则需要 1 |= ,如果想要某一位清零,则需要 0 &= 。
2、将设备驱动层代码放到linux内核的driver/char目录下。
3、修改makefile,添加设备驱动代码的文件名。
4、输入指令编译设备驱动模块,会生成.ko后缀的文件。
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 modules
5、装载设备驱动
sudo insmod xxx.ko
6、修改设备驱动文件权限
sudo chmod 666 xxx
7、调试驱动,内核的打印用的是printk,可以输入命令dmesg查看打印信息。
版权声明:本文为qq_42047245原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。