如何为自己的硬件需求深度订制DEY的BSP
通常,如果您原样照抄Digi的开发套件或称单板机的开发底板,只做些适量的裁减,并没有硬件的大改动或调整,您是无需订制bsp来匹配自己的底板。DEY的编译选项中,支持的平台包括ccimx6sbc,ccimx6ulsbc,ccimx6ulstarter这几个开发板。如果您的底板功能和I/O变化不大,您也可以直接在现有的这几个平台做些修改,但更一般的做法是,当你根据开发底板做一些裁减和功能变换,添加或修改了默认的一些接口和功能时,这也意味着您需要添加一个新的机器平台到DEY中。这个过程包括:
- 为U-Boot添加新的平台支持
- 添加新的设备树文件到Linux内核中
- 添加新的机器设备层到DEY的layer中
为u-boot添加新的机器平台支持
通常地,您可以直接使用Digi核心板自带的u-boot。我们建议您采用和Digi的开发板一样的控制芯片(比如以太网和USB的PHY等),避免对u-boot进行开发。使用Digi原生自带的UBoot,您仍可以通过uboot的脚本来实现对板子进行一些定制行为。如果您确实需要进行一些代码级的定制开发,请参考下面内容。
注:您可以利用核心板上的OTP单元来设置board_version和board_id,通常一个底板在流片完后,它的用途也基本确定下来,可以通过一个uboot脚本来一次性永久写入OTP。当写好后,uboot启动时,会自动根据OTP来设置uboot参数中的board_version和board_id,并把它的信息显示在启动信息内。其它uboot脚本可以根据这两个参数执行不同的动作,比如定义内核启动时加载不同的设备树驱动。启用程序也可以利用它执行不同的功能。
如果您不去设置OTP,您也可以通过uboot命令直接设置这两个环境参数,达到一样的效果,不过当uboot参数初始化或是损坏时,它也就变成未设置的状态,此时你就无法根据启动信息判断板子的用途。
添加设备树文件到Linux内核
Linux内核对特定硬件的支持是通过设备树文件实现的。设备树文件是描述硬件平台的文本文件,它是Linux内核源码树的一部分,但被单独编译成二进制文件。u-boot在启动过程会加载设备树到内存,并传递给内核。内核根据设备树中的硬件描述加载对应的设备驱动从而实现对特定硬件的支持。 CC6的设备树文件详细位置和参考:https://www.digi.com/resources/documentation/digidocs/90001546/reference/bsp/r_device_tree_files.htm
为您的底板创建设备树文件 你可以复制现有的设备树文件来加以修改定制,也可以从头创建一个设备树文件。
- 复制cc6 SBC的设备树
1. 从dey项目中fork linux源码 2. 复制设备树文件到本地 3.定制你的平台设备树,包括确保defconfig和设备树文件匹配你的需求 4.可修改dey的linux recipe来指向您的分支,或解压生成的patch到本地并添加到你的自定义layer