我想使用设备树驱动的Linux内核启动Raspberry Pi,是否需要特殊操作呢?
有没有人可以指点一下如何设置设备树为基础的树莓派内核引导。
我可能需要用于设备驱动兼容设备树的Raspberry Pi内核源代码。如果需要,我应该在哪里找到这样的内核源代码呢?
我想使用设备树驱动的Linux内核启动Raspberry Pi,是否需要特殊操作呢?
有没有人可以指点一下如何设置设备树为基础的树莓派内核引导。
我可能需要用于设备驱动兼容设备树的Raspberry Pi内核源代码。如果需要,我应该在哪里找到这样的内核源代码呢?
树莓派采用了 ARM11 SoC: Broadcom BCM2835。ARM 的设备树(DT)支持相对较新,但似乎已经应用到了树莓派 CPU 上。你可以在arch/arm/boot/dts/bcm2835.dts*
找到树莓派的 DT。
然而,默认的配置文件bcm2835_defconfig
并未启用设备树:
$ grep DT arch/arm/configs/bcm2835_defconfig
<nothing interesting>
我原以为可以像 CONFIG_OF*=y
或者 CONFIG_USE_OF=y
那样做,但不幸的是,这将会非常困难和漫长(需要3个月时间?)。
有没有特别的事情要做来实现呢?
这取决于您当前的 Linux 内核版本。您现在使用的 Linux 版本可能已经使用了设备树(Linux 3.7 或更新版本?)。
如果没有,那么您需要学习广泛的变化:
设备树完全改变了 Linux 内核引导的方式。它会影响到以下方面:
影响意味着:您需要一种方法来编译/烧录这些镜像:完整的源代码、构建环境、UART 访问、可能是 JTAG 硬件。在没有 JTAG 的情况下更改引导加载程序通常是自杀行为,除非您可以安全地从板子上重新编程您的 SD 卡。
谈到设备树时,您可能会找到OpenFirmware(OF) 的参考资料。在选择设备树约定之前,OpenFirmware 是 IBM PowerPC 上的原始规范。与设备树相关的代码在 Linux 中以 of_
为前缀。这并不直观......
请阅读:
以下是使用 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..
祝你愉快地编写代码 :-)