【系统移植】SD卡烧录uboot、linux内核、根文件系统

news2024/7/4 4:30:29

目录

一、SD卡分区

二、SD卡烧录uboot

三、SD卡烧录linux内核

四、SD卡烧录根文件系统

五、修改uboot环境变量

1、设置 bootcmd

2、设置 bootargs


 参考链接:IMX6Q的SD卡启动使用教程_mayue_csdn的博客-CSDN博客

一、SD卡分区

无论是EMMC还是SD卡启动,总体流程是

  • 先运行uboot引导程序,一般是对内存做一些初始化操作
  • uboot再引导加载linux内核镜像以及设备树文件
  • linux 内核在运行的时候需要一些配置文件,这些配置文件保存在根文件系统中,所以最后会加载根文件系统

为了方便 uboot 找到镜像文件、设备树文件 以及根文件系统,我们可以把zImage、imx6null.dtb 放在分区 sdb1,分区格式为 vfat;将根文件系统放在 sdb2,分区格式为 ext4。

具体分区操作参考: 【系统移植】SD卡 分区_仲夏夜之梦~的博客-CSDN博客

二、SD卡烧录uboot

烧录uboot需要用到dd命令,我们的目的是将uboot-imx 文件中的内容拷贝到SD卡中,拷贝时需要注意,我们得跳过前两个扇区,每个扇区是512个字节。

dd命令参考:dd 命令详解 

sudo dd if=uboot-imx of=/dev/sdb bs=512 seek=2 conv=sync
  • if:uboot源文件
  • of:输出文件或设备
  • bs:块的大小(这里和扇区大小保持一致)
  • seek:跳过一定数量的块再开始拷贝(imx6null 要跳过2个扇区,跳过1个扇区似乎会出错)
  • conv:输入输出同步,输出时可能会和输入有差异,不足部分用NULL补全

到这一步可以先测一下,如果无法载入uboot,后续的便也无法进行,如果看到如下内容说明uboot加载成功。

三、SD卡烧录linux内核

这里说的 linux内核包含两部分:linux 内核镜像、设备树。现在我们要把Linux内核拷贝到 sdb1 分区

mkdir tmpdir                        # 挂载点必须存在
sudo mount /dev/sdb1 tmpdir/        # 将外部设备 /dev/sdb1 挂载到 tmpdir         
 
sudo cp zImage imx6null.dtb tmpdir/        # 将linux内核拷贝到 /dev/sdb1
 
sudo umount tmpdir                # 使用完以后,取消挂载

zImage 和 uImage 的区别:        

        zImage是一般情况下默认的压缩内核映像文件,加上一段解压启动代码得到

        uImage则是使用工具mkimage对普通的压缩内核映像文件(zImage)加工而得,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息

四、SD卡烧录根文件系统

一般根文件系统是放在 nfs 服务端,因为我们可能时常需要修改文件系统中的文件。我们可以通过设置uboot环境变量让uboot在启动的时候可以找到nfs服务端上的根文件系统。

这里烧录到SD卡的目的是为了熟悉SD卡分区以及学习如何操作uboot环境变量来加载根文件系统。其实根目录就是我们所熟知的根文件系统

sudo mount /dev/sdb2 tmpdir      # 将外部设备 /dev/sdb2 挂载到 tmpdir
 
sudo cp -r rootfs/* tmpdir/        # 将rootfs下的所有内容拷贝到 /dev/sdb2
 
sudo umount tmpdir                # 使用完以后,取消挂载

五、修改uboot环境变量

假设现在uboot 可以正常启动,我们在倒计时之前按下任意键进入到uboot的交互模式,接下来我们要修改环境变量来让uboot找到linux内核、设备树文件、根文件系统的位置。

uboot 中有两个很重要的环境变量,一个是 bootcmd,另一个是 bootargs。修改环境变量使用的是setenv 命令

1、设置 bootcmd

设置该环境变量的目的是找到 Linux 内核和设备树文件。

setenv bootcmd 'mmc dev 0; fatload mmc 0:1 80800000 zImage; fatload mmc 0:1 83000000 imx6null.dtb; bootz 80800000 - 83000000'

接下来依次解读上述命令:

mmc dev 0:

        mmc dev表示切换设备,0 表示 SD卡,1 表示 EMMC

fatload mmc 0:1 80800000 zImage:

  • fatload 用于加载 vfat 文件系统的文件
  • mmc 表示接口
  • 0:1 表示SD卡上的第1分区(前者的 0 是设备编号,后者的 1 代表分区)
  • 80800000:表示要加载到DDR的哪个位置
  • zImage:表示要加载分区中的哪个文件(文件名必须和SD卡中保存的文件名一致)

fatload mmc 0:1 83000000 imx6null.dtb:

        加载SD卡中第一分区的 imx6null.dtb 文件,保存到DDR的0x83000000位置

bootz 80800000 - 83000000:

        bootz 表示运行 zImage 内核文件,原本的格式是“bootz  内核  根文件系统  设备树”

        但是设备树以其他方式加载,所以使用“-” 填充

2、设置 bootargs

 setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk0p2 rootwait rw'

接下来依次解读上述命令:

console=ttymxc0,115200  

        通过串口打印控制台信息,串口波特率为115200

root=/dev/mmcblk0p2 rootwait rw

        指定根文件系统的位置

        mmcblk0p2 表示从SD卡的第2分区加载根文件系统

                - mmcblk         表示设备类型为mmc

                - 0                    指定了设备(0 表示 SD卡,1 表示 EMMC)

                - p2                  指定分区,这里表示第2分区       

        rootwait         表示等待 mmc 设备初始化完成以后再挂载

        rw                  指定文件系统的权限可读可写

最终启动的效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/544494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Promise理解

做一道题,理解一下: function getPrinterList() {let res 初始setTimeout(() > {res 1},1000)return res }let res getPrinterList() console.log(res); //输出初始 在getPrinterList函数中,先分清同步异步. JS执行语句时,会区分同步异步,把所有的同步放在同步队列中,把…

2023-5-19-Debug和Release到底有多少不同?

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

【HTTPS加密】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1.HTTPS 是什么 1.1 运营商劫持 1.2 关于加密…

面试季,真的太狠了...

金三银四面试季的复盘,真的太狠了… 面试感受 先说一个字 是真的 “ 累 ” 安排的太满的后果可能就是一天只吃一顿饭,一直奔波在路上 不扯这个了,给大家说说面试吧,我工作大概两年多的时间,大家可以参考下 在整个面…

【FMC201】基于FMC标准的1路CameraLink Full 输入 子卡模块

产品概述 FMC201是一款CameraLink信号输入(采集)FMC子卡模块,该模块支持2路CameraLink Base模式或者1路CameraLink Full模式的图像信号输入。板卡具有2个CameraLink端口(SDR26),可以作为采集卡使用。 技术指…

不仅能满足需求,还能提高效率。教你建立自动化测试请求封装

目录 前言: 一、整体框架介绍 二、代码实现 1. config文件配置 2. API封装方法实现 3. 测试用例编写 4. 运行测试用例 三、总结 前言: 在接口自动化测试中,我们都知道一个重要概念就是接口请求封装,可以大幅度提供自动化…

中间件(三)- Zookeeper

Zookeeper 1. Zookeeper介绍1.1 什么是Zookeeper1.2 Zookeeper的应用场景 2. 搭建ZooKeeper服务器2.1 下载安装包2.2 配置文件2.3 启动测试 3. Zookeeper内部的数据模型3.1 zk如何保存数据?3.2 zk中的znode是什么样的数据结构3.3 zk中节点znode的类型3.4 zk的数据持久化 4. Zo…

18-01 数据库架构设计综述

数据库架构设计的基本思路 需求分析阶段(最困难、最耗时) 整个设计过程的基础 需求分析做得是否充分以及准确,决定了数据库设计的速度与质量极端场景下,需求分析做得不好,可能会导致整个数据库设计返工、重做 需求分…

RSBBS 报表接口 query跳转 RRI

这里只讲RSBBS的goto query,不讲query里面的替换路径。 报表接口就是从一个query跳转到另一个目的地。从下面能看到,可以跳转到一个BW系统下的query,或者能跳转到ERP系统的一个ABAP report也行,或者可以通过archive link去从quer…

node之excel转化成json格式的数据

1. node环境(自己看教程搭建) 2.安装node-xlsx和fs yarn node-xlsx 3.写代码。简单实例如下(如果需要处理数据,自己处理) 实例: 目录: b.js var xlsx require(node-xlsx); var fs require(fs); const path requ…

基于布谷鸟优化算法(CS)在微电网优化中的应用研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【Mybatis】SpringBoot整合Mybatis之增删改查

目录 一、准备 1、选择依赖 2、配置文件 3、映射接口 二、Select 三、Delete 四、Update 五、Insert 一、准备 1、选择依赖 在我们创建SpringBoot项目的时候,需要选择Mybatis与MySQL的依赖 2、配置文件 然后我们需要在配置文件里配置MySQL的连接信息 spr…

UEBA技术在ADAudit Plus中的应用

摘要:用户和实体行为分析(UEBA)技术是当今信息安全领域的重要工具之一。本文将介绍UEBA技术在ADAudit Plus中的应用,探讨其在提供安全性和监控能力方面的优势,并解释为何ADAudit Plus是一种出色的UEBA解决方案。 UEBA …

免费下载|《建设数字中国 升级数智底座-企业数智化底座白皮书》

企业数智化历经多年的演进,已经从最初的“局部推动业务提质增效”,发展为“利用技术全面赋能业务创新活动”,数智化能力的建设正逐步与企业的战略目标深度融合。企业践行数字化优先,以智能化促进发展,根本上需要依托健…

高并发系统的三把利器

目录 1.限流 2.缓存 2.1.缓存的使用场景 3.降级 3.1.什么是降级? 3.2.服务降级方式 4.其他高并发手段 4.1. 集群 4.2.拆分 4.2.1 应用拆分 4.2.2 数据库 4.3. 静态化 4.4.削峰 4.5.限流 5.总结 参考 保护高并发系统的三大利器:限流、熔…

【Proteus仿真】基于VSM 51单片机定时计数器闹钟例程

【Proteus仿真】基于VSM 51单片机定时计数器闹钟例程 🎬例程仿真功能操作演示: ✨本例程可从软件内部所提供的历程中找到,但是需要自行安装SDCC编译器才能对其源代码重新编译。 ⚡需要自行安装SDCC编译器。 🛠Proteus内部安装SDCC编译器方法 🌿将窗口切换到Source Co…

少儿编程 中国电子学会图形化编程等级考试Scratch编程四级真题解析(判断题)2023年3月

2023年3月scratch编程等级考试四级真题 判断题(共10题,每题2分,共20分) 11、在使用自定义积木时,不可以传递布尔型参数 答案:错 考点分析:考查自定义积木的使用,使用自定义积木的时候可以传递数字、文本和布尔型参数,所以错误 12、执行如下图程序后,输出的结果为“…

论文总结+公式分析

目录 1.Learning with Noisy Correspondence for Cross-modal Matching(NCR)1-1.贡献和创新点1-2.图1-2-1.总图1-2-2.Co-divide1-2-3. Co-Rectify1-2-4.Robust Cross-modal Matching 1.Learning with Noisy Correspondence for Cross-modal Matching(NCR) 1-1.贡献和创新点 提…

来报名丨下一代因子挖掘统一框架:打破界限的流式实时计算平台

大家期待已久的量化科技嘉年华,现在正式开启报名啦! 2023年6月2日-3日,DolphinDB 联合主办的 “2023量化科技嘉年华” 将在上海世博中心召开,本次大会主题涵盖因子/数据/交易/算法/算力,通过国内外顶尖量化金融专家最…

AIGC出击研发、营销,文心一言们要改变鞋服行业产业链条?

(图片来源于网络,侵删) 文 | 螳螂观察 作者 | 叶小安 你敢设想这样一种未来吗? 看到的消费品广告都是AI设计的,甚至连电影、电视甚至直播带货都是由AI机器人制作好的画面。 2022年尾,ChatGPT的诞生刷爆…