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

时间:2014-03-05 15:54:18

标签: linux-kernel raspberry-pi linux-device-driver device-tree

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

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

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

1 个答案:

答案 0 :(得分:16)

Raspberry Pi上的设备树支持

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

但默认配置文件bcm2835_defconfig未启用设备树:

$ grep DT arch/arm/configs/bcm2835_defconfig
<nothing interesting>

我期待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卡分区布局。您需要为设备树文件本身腾出空间。
  4. 影响意味着:您需要一种编译/编程这些映像的方法:完整源代码,构建环境,UART访问,潜在的JTAG硬件。在没有JTAG的情况下更换引导加载程序通常是自杀,除了(今天)您可以安全地从板上重新编程SD卡。

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

    请阅读:

    1. http://devicetree.org/Main_Page
    2. Documentation/devicetree
    3. 如何生成设备树二进制(.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..
      

      快乐的黑客行为: - )