用于树莓派的设备树驱动的内核

Ami*_*mar 11 linux-device-driver linux-kernel raspberry-pi device-tree

我想用设备树驱动的linux内核启动raspberry pi,有什么特别的事情要做吗?

任何人都可以指出为raspberry pi设置基于设备树的内核启动所需的内容.

我可能需要使用raspberry pi内核源代码,其中设备的驱动程序应该与设备树兼容.如果是这样,我在哪里可以找到Raspberry Pi的内核源代码?

m-r*_*ric 16

Raspberry Pi上的设备树支持

Raspberry Pi嵌入了ARM11 SoC:Broadcom BCM2835.ARM的设备树(DT)支持相当新,但它似乎已经进入了Raspberry Pi CPU.你可以找到Raspberry Pi的DT arch/arm/boot/dts/bcm2835.dts*.

但是,默认配置文件bcm2835_defconfig不启用设备树:

$ grep DT arch/arm/configs/bcm2835_defconfig
<nothing interesting>
Run Code Online (Sandbox Code Playgroud)

我期待的东西像CONFIG_OF*=yCONFIG_USE_OF=y.坏消息:这将是艰难而漫长的(3 noob.month?).

这有什么特别的事吗?

这取决于您当前的Linux内核版本.您现在的Linux可能已经使用了设备树(linux-3.7或更高版本?).

如果没有,您需要研究的变化很大:

设备树对系统的影响

设备树完全改变了Linux内核启动的方式.它影响:

  1. 你的bootloader(例如u-boot.bin).U-Boot必须知道如何处理设备树.旧的U-Boots不知道设备树是什么......
  2. Linux内核映像(例如zImage).Linux 必须知道必须在设备树中获取其硬件描述.
  3. 闪存/ SD卡分区布局.您需要为设备树文件本身腾出空间.

影响意味着:您需要一种编译/编程这些映像的方法:全源,构建环境,UART访问,潜在的JTAG硬件.在没有JTAG的情况下更换引导加载程序通常是自杀,除了(今天)您可以安全地重新编程SD卡.

在谈论设备树时,您可能会发现对OpenFirmware(OF)的引用.在选择Device Tree约定之前,OpenFirmware是IBM PowerPC上的原始规范.与device-tree相关的代码of_在linux中以前缀为前缀.不直观,我知道......

请阅读:

  1. http://devicetree.org/Main_Page
  2. Documentation/devicetree

如何生成设备树二进制(.dtb)?

使用buildroot的PowerPC板上的示例:

/usr/bin/make -j5 HOSTCC="/usr/bin/gcc" HOSTCFLAGS="" ARCH=powerpc INSTALL_MOD_PATH=/home/evigier/buildroot/output/target CROSS_COMPILE=" /home/evigier/buildroot/output/host/usr/bin/powerpc-buildroot-linux-gnu-" DEPMOD=/home/evigier/buildroot/output/host/sbin/depmod -C /home/evigier/buildroot/output/build/linux-master mpc8347.dtb

PowerPC板上的U-Boot控制台输出示例:

Uncompressing Kernel Image ... OK
kernel loaded at 0x00000000, end = 0x006f8780
## cmdline at 0x0ff1b900 ... 0x0ff1b925
## initrd_high = 0xffffffff, copy_to_ram = 1
ramdisk load start = 0x00000000, ramdisk load end = 0x00000000
## device tree at 00780000 ... 00781f57 (len=20312 [0x4F58])
Loading Device Tree to 0ff16000, end 0ff1af57 ... OK
## Transferring control to Linux (at address 00000000) ...
Booting using OF flat tree..
Run Code Online (Sandbox Code Playgroud)

快乐的黑客:-)