背景

得到 dtb 文件以后,我们需要想办法下载到 板子中,并给 Linux 内核使用。

(高级版本的 uboot也有了 自己使用设备树支持,我们这里不讨论 uboot 使用的设备树)

Linux 内核 有关规定

根据Documentation/arm/Booting的描述,我们需要提供 参数列表 或者 设备树镜像 地址。

4. Setup boot data
------------------ Existing boot loaders: OPTIONAL, HIGHLY RECOMMENDED
New boot loaders: MANDATORY The boot loader must provide either a tagged list or a dtb image for
passing configuration data to the kernel. The physical address of the
boot data is passed to the kernel in register r2.

Uboot 有关规定

根据上面的描述,uboot 传参有2种类型。

1)通过 tag 传递 参数列表 给 Linux 内核

通过 tag 给内核传参时,是只需要知道内核的地址就可以了。

因为uboot给内核传的参数一般是放到内存的某个地址,因为tag所占的内存比较小,所以一般都时放在内存的起始地址+0x100的位置

所以可以直接使用: bootm + 内核所在内存的地址 来运行内核

bootm <uImage_addr>

2)使用了设备树之后,一般我们是这样启动的

bootm <uImage_addr> <initrd_addr> <dtb_addr>

uImage_addr : 内核地址,需要是uImage 

initrd_addr : initrd的地址(如果不存在initrd,可以用 “-”代替),initrd是一个内存文件系统,因为在内核内启动之前,一般是文件系统还没加载上的。而有些东西必须要通过文件系统才能操作启动。所以必须要有一个过渡的文件系统。

dtb_addr    : 设备树地址

附录: uboot 的参考设定

以下是基于 以前接手过的一个项目中的一些参考信息。

# uboot 各部分 储存与内存 对应信息
...
tftp 0x100000 boot.bin;
nand write 0x100000 0x0 0x300000; tftp 0x1000000 logo.bin;
nand write 0x1000000 0x300000 0x200000; tftp 0x2000000 uImage;
nand write 0x2000000 0x500000 0x500000; tftp 0x3000000 zynq.dtb;
nand write 0x3000000 0xa00000 0x20000; tftp 0x4000000 rootfs.img;
nand write.trimffs 0x4000000 0x2000000 0x8000000; # 启动命令
uboot> print
以下是有关信息(节选) boot_image=BOOT.bin bootcmd=nand read 0x1000000 0x500000 0x500000;nand read 0x2000000 0xa00000 0x20000;bootm 0x1000000 - 0x2000000

设备树DTS 学习: 4-uboot 传递 dtb 给 内核的更多相关文章

  1. 设备树DTS 学习: uboot 传递 dtb 给 内核

    背景 得到 dtb 文件以后,我们需要想办法下载到 板子中,并给 Linux 内核使用. (高级版本的 uboot也有了 自己使用设备树支持,我们这里不讨论 uboot 使用的设备树) Linux 内 ...

  2. 设备树DTS 学习:1-有关概念

    背景 设备树在Linux驱动开发中是一种比较常用的架构. 参考:<设备树DTS使用总结> .<linux内核设备树及编译> Linux设备树 介绍 在Linux 2.6中,ar ...

  3. 设备树DTS 学习:2-设备树语法

    背景 通过上一讲了解完设备树DTS有关概念,我们这一讲就来基于设备树例程,学习设备树的语法规则. 参考:设备树详解dts.设备树语法详解.设备树使用总结 设备树框架 1个dts文件 + n个dtsi文 ...

  4. 设备树DTS 学习:4-编写实战

    背景 讲完设备树的有关概念以及语法以后,我们接下来就让 我们的驱动 使用 设备树. ref : <内核学习笔记14:内核设备树学习>.<u-boot对设备树的支持> 测试代码 ...

  5. 设备树DTS 学习:Linux DTS文件加载过程

    背景 了解机制有利于对内核有更深的认识. wget https://mirrors.aliyun.com/linux-kernel/v3.x/linux-3.2.61.tar.xz 内核 在drive ...

  6. 设备树DTS 学习:3-常用的DTS 函数

    Linux内核中目前DTS相关的函数都是以of_前缀开头的,它们的实现位于内核源码的drivers/of下面 void __iomem*of_iomap(struct device_node *nod ...

  7. Linux dts 设备树详解(二) 动手编写设备树dts

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 前言 硬件结构 设备树dts文件 前言 在简单了解概念之后,我们可以开始尝试写一个 ...

  8. uboot学习之五-----uboot如何启动Linux内核

    uboot和内核到底是什么?uboot实质就是一个复杂的裸机程序:uboot可以被配置也可以做移植: 操作系统内核本身就是一个裸机程序,和我们学的uboot和其他裸机程序没有本质的区别:区别就是我们操 ...

  9. Linux 设备树 dts

    1. dtb反编译成dts文件命令:./kernel-4.4/scripts/dtc/dtc_overlay -I dtb -O dts out/target/product/m863ur100_p0 ...

  10. Linux dts 设备树详解(一) 基础知识

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 1 前言 2 概念 2.1 什么是设备树 dts(device tree)? 2. ...

随机推荐

  1. Java中的读写锁ReentrantReadWriteLock详解,存在一个小缺陷

    写在开头 最近是和java.util.concurrent.locks包下的同步类干上了,素有 并发根基 之称的concurrent包中全是精品,今天我们继续哈,今天学习的主题要由一个大厂常问的Jav ...

  2. vue-公共组件的注册

    注册公共组件,在每个需要的页面直接输入文件名(<g-table/>)即可引用该组件 步骤: 1.新建components/global文件夹,以及components/global/g-t ...

  3. Nginx 简单应用(Windows os)

    实际问题如下: 我的电脑上有vm虚拟机,我有两个网络,一个叫137,一个叫102 ,我现在vm的网络是102的网络(137不允许被vm使用),但是别人都是137的网络,如何让137的局域网访问我的vm ...

  4. vim 使用black 格式化python代码

    vim 使用black 格式化代码 github black 的github https://github.com/psf/black 安装 pip3 install black 使用 black f ...

  5. 四:大数据架构回顾-IOTA架构

    IOTA大数据架构是一种基于AI生态下的全新的数据架构模式,2018年,易观首次提出这一概念.IOTA的整体思路是设定标准数据模型,通过边缘计算技术把所有的计算过程分散在数据产生.计算和查询过程当中, ...

  6. 如何阅读 Paper

    前言 论文(Paper)通常是新技术.算法.编程方法或软件工具的首次公布.通过阅读论文,我们可以了解最新的技术进展,保持自己的技能和知识是最新的. 同时,论文提供了对特定主题深入理解的机会.它们通常包 ...

  7. C++ lambda的重载

    先说结论,lambda是不能重载的(至少到c++23依旧如此,以后会怎么样没人知道).而且即使代码完全一样的两个lambda也会有完全不同的类型. 但虽然不能直接实现lambda重载,我们有办法去模拟 ...

  8. three.js教程5-几何体顶点UV坐标、纹理贴图TextureLoader

    1.纹理贴图 纹理贴图,是给MeshLambertMaterial等材质一些纹理图片,以达到更好的视觉效果. 使用方法:通过纹理贴图加载器TextureLoader的load()方法加载一张图片可以返 ...

  9. uniapp有意思的api之openSetting

    点击查看代码 <details> <summary>解决用户拒绝授权问题</summary> uni.openSetting({ success(res) { co ...

  10. 使用c#强大的表达式树实现对象的深克隆

    一.表达式树的基本概念 表达式树是一个以树状结构表示的表达式,其中每个节点都代表表达式的一部分.例如,一个算术表达式 a + b 可以被表示为一个树,其中根节点是加法运算符,它的两个子节点分别是 a ...