本文主要是介绍NUC980 设备树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、U-Boot中有关设备树的配置
- 二、Kernel中有关设备树的配置
- 三、NUC980的上电启动
- 四、NUC980的系统内存映射
一、U-Boot中有关设备树的配置
- 通过终端进入 01.u-boot_v2016 中
- make distclean //清除所有的object code.
- make coidea_nuc980_defconfig //设置Uboot为出厂设置
- make menuconfig 中配置如下项:
Boot images —>
[ * ] Support Flattened Image Tree
Library routines —>
[ * ] Enable the FDT library
[ ] Support running EFI Applications in U-Boot
配完后记得Save; - make all //编译U-Boot
编译成功后会产生 u-boot.bin 和 u-boot-spl.bin(如果出错,再 make all 一次就好了) :
u-boot.bin : 完整功能的 U-Boot
u-boot-spl.bin : 将 Main U-Boot 从 NAND flash 搬到 DDR 执行, 只有 NAND boot 时才会用到,
如果是 SPI boot 或 eMMC boot 只需要 u-boot.bin
u-boot-spl.bin 会产生在子目录 /spl 中
u-boot.bin 会产生在根目录中
UBoot 编译完成后会在/tools 子文件夹下生成 mkimage 工具,在编译内核生成 uImage 时会用到这个工具。所以使用命令:
#cp tools/mkimage /bin
安装 mkimage 工具( 重要) 。
二、Kernel中有关设备树的配置
-
查看/home/coidea/nuc980 路径下是否有 image 文件夹, 若没有, 则创建一个(必须) 。
-
通过终端进入 02.linux_kernel 中
-
make clean //清除以前的编译数据
-
make coidea980_defconfig //使用内核出厂配置,注意会使内核还原成配酷客初始配置
-
make menuconfig 中配置如下项:
Device Drivers —>
[ * ] Device Tree and Open Firmware support —>
Boot options —>
[ * ] Flattened Device Tree support
配完后记得Save; -
make uImage //编译内核,生成980uimage
-
make //编译生成nuc980-dev-v1.0.dtb
编译完成后会在/home/coidea/nuc980/image 生成我们所需的980uimage 镜像 。(注意:1.我们用到的是 980uimage 这个文件, 而不是 980image 2.确保执行这一步之前已经编译过 uboot 并安装过 mkimage 工具)
设备树会保存在arch/arm/boot/dts/nuc980-dev-v1.0.dtb -
这里使用coidea的开发板,建议我们新增个coidea的设备树;
a. 进入目录 arch/arm/boot/dts 中,复制一份nuc980-dev-v1.0.dts,然后将其重命名为coidea980-dev-v1.0.dts,命令如下:
cd arch/arm/boot/dts
cp nuc980-dev-v1.0.dts coidea980-dev-v1.0.dts
b. coidea980-dev-v1.0.dts创 建 好 以 后 我 们 还 需 要 修 改 文 件 arch/arm/boot/dts/Makefile , 找 到 “ dtb-$(CONFIG_ARCH_NUC980)”配置项,在此配置项中加入“coidea980-dev-v1.0.dtb” ,如下所示:
dtb-$(CONFIG_ARCH_NUC980) += \
nuc980-dev-v1.0.dtb \
coidea980-dev-v1.0.dtb
三、NUC980的上电启动
NUC980的UBoot前置启动流程:
IBR(Internal Boot ROM) —> u-boot-spl —> u-boot;
NUC980系列支持内置16 KB嵌入式SRAM和16.5 KB IBR(内部引导ROM),用于从USB, NAND, SD/eMMC和SPI Flash启动。
uboot-spl 叫做 uboot-second program loader (是uboot 的第二加载程序,第一加载程序是原厂的程序IBR),其功能特点:
- 只适用于NAND引导,SPI引导和eMMC引导只需要U-Boot;
- 初始化默认串口;
- 设置GD结构体;
- 将U-Boot从NAND flash移动到DDR,并启动U-Boot。
四、NUC980的系统内存映射
该芯片仅支持小端数据格式,并提供4g字节的寻址空间。内存空间的定义如图6 -2所示。
从0x0000_0000到0x1FFF_FFFF的内存空间用于SDRAM和外部设备。从0x3C00_0000到0x3C00_3FFF的内存空间用于嵌入式的16kbytes SRAM。用于片上控制器和外设的内存空间是从0xB000_0000到0xB00A_3FFF,而从0xFFFF_0000到0xFFFF_41FF的内存空间用于16.5 Kbytes的内部引导ROM。
该芯片提供阴影记忆功能。从0x8000_0000到0x9FFF_FFFF的内存空间是与从0x0000_0000到0x1FFF_FFFF的内存空间对应的影子内存空间。从0xBC00_0000到0xBC00_3FFF的内存空间是用于从0x3C00_0000到0x3C00_3FFF的内存空间的影子内存空间。如果片上控制器的DMA想要访问这个16Kbytes的嵌入式SRAM,就必须使用0xBC00_0000到0xBC00_3FFF的内存空间。
预留的内存空间无法访问。芯片在访问预留内存空间时的行为是不确定和不可预测的。
分配给每个片上控制器或外设的寻址空间,如表6.2-1所示。
这篇关于NUC980 设备树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!