STM32工程师 LINUX学习笔记10 实战项目刨根问底学习LINUX,设备树学习

前言

经过之前的学习。串口驱动的跟在于设备树。所以必须把设备树的使用有深入了解。

设备树历史

过去ARM Linux中,充斥着大量的垃圾代码,这些设备代码与对应公司单板启动或运行细节强绑定,无法复用和移植。同时内核中没有规范来引导,导致代码越来越臃肿。最终因为Tony Lindgren,内核OMAP development tree的维护者,发送了一个邮件给Linus,请求提交OMAP平台代码修改,并附带修改以及如何解决merge conficts,让linus发出怒吼“Gaah.Guys, this whole ARM thing is a f*cking pain in the ass.”(linus对arm这样代码肯定深恶痛绝已久)。

这一骂引出了对设备文件信息的思考,原有的linux内核里面大部分对硬件资源的描述做了硬编码,当然这个邮件还是值得一看的,linus大佬还是摆事实,讲道理的,现在做一次合并,arm架构下的变动都超过60%。
邮件原文如下:
在这里插入图片描述
在这里插入图片描述
linux源代码的庞大,不仅仅学习linux的感觉到头大,看来维护人员也头大。

最终经过讨论,对ARM平台相关code做出相关规范:

1.ARM的核心代码仍然保存在arch/arm目录下;
2. ARM SoC core architecture code保存在arch/arm目录下;
3. ARM SOC的周边外设模块的驱动保存在drivers目录下;
4. ARM SOC的特定代码在arch/arm/mach-xxx目录下;
5. ARM SOC board specific的代码被移除,由DeviceTree机制来负责传递硬件拓扑和硬件资源信息。

本质上,Device Tree改变了原来用hardcode方式将硬件设备配置信息嵌入到内核代码的方法,改用bootloader传递一个DB的形式。

本质上,Device Tree改变了原来用code方式将HW配置信息嵌入到内核代码的方法,改用bootloader传递一个DB的形式。对于嵌入式系统,在系统启动阶段,bootloader会加载内核并将控制权转交给内核,此外,还需要把上述的三个参数信息传递给kernel,以便kernel可以有较大的灵活性。在linux kernel中,Device Tree的设计目标就是如此。
在devie tree中,可描述的信息包括:

1、CPU的数量和类别
2、内存基地址和大小
3、总线和桥
4、外设连接
5、中断控制器和中断的使用情况
6、GPIO控制器和GPIO使用情况
7、clock控制器和clock使用情况

它基本就是一棵电路板上的CPU、总线、设备组成的树,Bootloader会将这棵树传递给内核,然后内核来识别这棵树,并根据它展开出Linux内核中的platform_device、i2c_client、spi_device等设备,而这些设备用到的内存、IRQ等资源,也被传递给内核,内核会将这些资源绑定给展开的相应设备

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值