一、认识设备树的结构
编译好内核后,进入设备树目录:(我的在)/home/hsw/linux_kennel/linux/arch/arm/boot/dts
使用命令,列出所有和4b树莓派相关的设备树文件.
ls bcm2711* bcm2835*
其中bcm2711-rpi-4-b.dts便是我们要的,以后的开发也会在此设备树文件下添加节点等工作,并将其编译成.dtb加载到树莓派上。
使用命令,进入文件:
gedit bcm2711-rpi-4-b.dts
可能你还没下载gedit这个编辑工具,可以使用sudo apt-get install gedit;
执行后会看到,
我们关注的是它的包含文件,bcm2711.dtsi和bcm2711-rpi-dtsi,使用相同命令,打开这两个文件:
观察内容,发现第二个文件不是重点,因为它没有描述外设这些,所以我们不要再从第二个文件扩展了,放眼第一个文件,它包含了一个bcm283x.dtsi,我们再移步这个文件:
可以看到它不再包含什么.dtsi文件了,这就是树莓派的底层描绘文件。移步其内容:往下便可找到节点soc,soc下面又有gpio这个子节点,截出部分内容:
如果你学过正点原子的imx6u,那这里的gpio子节点就相当于imx6u的pinctrl子系统,平台不同,各自有各自的命名规定。
这里的brcm,pins =是树莓派规定的规定格式,类同正点原子的
那这种描述是什么意思呢?如果要知道,就要查看绑定文档:
路径:/home/hsw/linux_kennel/linux/Documentation/devicetree/bindings
可以看到有一个pinctrl目录,进入:
gedit brcm,bcm2835-gpio.txt :这个是树莓派描述pinctrl的属性的
对应:
接着,gedit pinctrl-bindings.txt :讲述pintrl怎么使用
再接着我们看到
故使用gedit ../gpio/gpio.txt
这里描述了怎么使用gpio口。
好了,说到这里,我想表达的是,想开发一个开发板,就先知道那些表达的含义,怎么知道?查看绑定文件,这里用gpio口举一反三,其他外设步骤相同。
经过上面的查看跳转,我们得到了如下信息:
pinctrl怎么描述,io口怎么描述
有了这两个知识,我们就好开发了。
这里提一下,我为什么知道bcm2711-rpi-4-b.dts是我们要用的?
因为我经过文件的扩展,发现
和树莓派手册中的bcm2711-peripherals.pdf (raspberrypi.com)
寄存器地址对的上。
二、各个文件的解释
bcm2711-rpi-4-b.dts bcm283x.dtsi bcm2711.dtsi
bcm283x.dtsi你可以理解成树莓派的原厂用来描述树莓派这个核心芯片信息的文件,它描述的是树莓派核心芯片的信息,然后开放到社区。
原厂升级了树莓派,衍生了2711系列,因为继承了283x系列的东西,所以直接在bcm283x.dtsi基础上修改出了2711这款具体芯片的底层描述文件,生成了bcm2711.dtsi。
2711-4-b开发板厂家购买了它的权利后,工程师就在bcm2711.dtsi基础上添加自己设计的板子的信息,比如时钟,哪个引脚应用在什么上,自己的设备树底层板载芯片使用信息,比如描述了iic的引脚、几个参数cell,地址等。
最后,得到开发接口描述文件bcm2711-rpi-4-b.dts文件,使用该文件以追加的形式进行开发,&节点,追加具体设备等。