MCU中设备驱动程序
在基于MCU的普通嵌入式驱动程序开发中,并不会经常接触到鼠标、键盘、硬盘这一类的设备,多数是一些较为简单的传感器设备、小容量的存储设备等等,通常数据的传输使用的是spi、i2c、串口这一类的串行通信协议,通常一个设备驱动程序的开发就是这样的流程:
数据传输层,一般在MCU上集成相应的硬件控制器,配置寄存器即可数据处理层,根据收发的数据对数据进行解析,然后控制设备做相应处理。
linux设备驱动程序
编译
编译这个程序,我们都知道,linux下编译程序一般使用make工具(简单的程序可以直接命令行来操作),以及一个Makefile文件,在内核开发中,Makefile并不像应用程序那样,而是经过了一些封装,我们只需要往其中添加需要编译的目标文件即可:
obj-m+=hello_world.o
all:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean
其中hello_world.o就是目标文件,make工具会根据目标文件自动推导来编译hello_world.c文件。
加载
编译生成了内核文件,接下来就要将其加载到内核中,linux支持动态地添加和删除模块,所以我们可以直接在系统中进行加载:
sudo insmod hello_world.ko
我们可以通过lsmod命令来检查模块是否被成功加载:
我们也可以卸载这个模块:
sudo rmmod hello_world.ko
printk属于内核函数,它与printf在实现上唯一的区别就是printk可以通过指定消息等级来区分消息输出,在在这里,printk输出的消息被输出到/var/log/kern.log文件中,我们可以通过另开一个终端来查看内核日志消息:
tail -f /var/log/kern.log
tail -f表示循环读取/var/log/kern.log文件中的消息并显示在当前终端中,这样我们就可以在终端查看内核中printk输出的消息。
如果你不想重新开一个终端来显示内核日志,希望直接显示在当前终端,你可以这样做:
tail -f /var/log/kern.log &
后面的内容再加



