问:嵌入式linux怎么控制io,iic, uart等硬件功能?
答:写好驱动,运行在系统下的程序就可以透过驱动来控制硬件功能。
Linux实行的是驱动与应用分层的设计。我们需要对要控制的设备,比如串口,io,硬件spi接口灯写好对应的驱动程序,完成初始化,获取数据,发送数据等底层操作都是写在驱动内。
写好的驱动程序需要被编译进linux内核中。(当然,也有动态装载的方法)
运行在系统下的程序(应用层)是无法操作底层寄存器的,只有运行于内核中的驱动才有这个权限。所有应用程序都可以通过驱动去控制硬件。
比如我想实现控制一个led。在系统下编写的程序无权控制底层寄存器,就需要先写一个驱动,驱动内实现初始化led相关的io寄存器,实现点亮/熄灭led的操作功能。然后将其编译进内核,系统下的所有程序就都可以调用该驱动留下的接口,实现对led的控制。
学习嵌入式linux,自己编写驱动是必经之路。
问:设备树是干什么的?
答:设备树,以树形结构描述当前连接的所有设备,描述给系统和驱动看
应该很多人写51单片机代码的时候都有个习惯,把引脚连接信息用#define写在程序前面,比如#define led0 P1.1 。这样后面写代码的时候都只要用led0这个名字,就算把led拔掉换到另一个引脚上,只要修改代码文件中这一句,就可以继续用。设备树就相当于单片机程序中的#define led0 P1.1,不过描述的信息多了一些。
设备树内会写着led012345各自连接在哪些引脚,key12345又连接在哪些引脚,xx模块挂载在哪个spi口上,xx模块在iic总线上的地址。(设备树由你写,写哪些数据由你决定)
如果硬件发生变动,只需要编写好新硬件电路的设备树,就可以沿用原来编写好的驱动。不需要因为led换了个引脚插,或是多加了个led,就需要重新翻出驱动进行修改。
版权声明:本文为CSDN博主「orange2c」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43850980/article/details/121946375
暂无评论