行情
HOME
行情
正文内容
NAND对拷系统不启动 initramfs编译到内核似乎没运行,都怪自己没看官方教程
发布时间 : 2025-04-12
作者 : 小编
访问数量 : 23
扫码分享至微信

initramfs编译到内核似乎没运行,都怪自己没看官方教程

现象

Kernel挂载自定义的文件系统后似乎没有任何提示,不知文件系统制作是否成功。

背景

Linux的根文件系统调试方式有很多种,uboot传递相应参数告知从Kernel从哪里挂载根文件系统: MTD、硬盘、NFS、SD卡、initramfs。这里我选择的是initramfs的方式挂载,目的是尽可能 排除其他环境因素影响文件系统测试,包括:NFS root没有执行权限;uboot的NAND纠错算法(ECC)和 Kernel的不一致导致MTD数据载入错误。

initramfs是直接和Kernel绑定在一起,同时解压到内存,踩坑的概率要小很多 ,保证文件系统 足够小、内存足够大,基本不会遇到问题。

之所以写这篇文章是没仔细读取Kernel官方文档:Documentation/filesystems/ramfs-rootfs-initramfs.rst。

1. 制作方式

上文说了initramfs要保证文件系统足够小、内存足够大。没有什么比一句话代码的容量更小。 万能的儿童版Hello world教程,这个例位于linux源码 Documentation 目录下,注意后面的休眠2秒,

为什么休眠2秒,这里先埋个包袱

源码最好静态编译,避免遗漏拷贝 .so 影响测试。

配置内核填入initramfs的根目录

uboot传递启动参数:setenv bootargs ‘console=ttyAM0,115200n8 rdinit=/sbin/init’

Kernel的ramdisk_execute_command字符串接受这个参数,rdinit是initramfs执行的第一个程序位置, 进程的PID是1。

console这么传递请参考上一篇文章《uboot传递console究竟怎么填?ttyX傻傻分不清》。

Kernel最后加载文件系统阶段首先检查是否存在rdinit所指的文件,不存在则从其他媒介设备 挂载文件系统。从Kernel角度来说,无论是rdinit和其他媒介设备的文件系统内核都同等对待, 只是找到谁就执行谁而已。

相关源码位于init/main.c

走你,咦!内核启动结束后没看到期待的 “Hello world”

2. 提出排查方向

起初怀疑3个方向:

文件没有找到文件找到了,却没执行权限文件找到了,也执行了,但没找到stdout

3. 排除设想1、2

从输出结果怀疑方向,首先最先排除的是“设想1”,肯定是找到/sbin/init,否则不会出现倒数第二行 “CPU 0执行的init进程PID 1 退出”,没执行哪来的退出,于是排除“设想2”。

验证方案也很简单,删除/work/ramfs/sbin/init再测试一次。

输出内容有明显差异,输出意思:rdinit所指文件不存在,尝试从其他媒体设备挂载文件系统,而其他媒体 设备位置却没有传递,请纠正 “root=” 参数。

5. 确认设想3

回头看 Warning: unable to open an initial console 。某个console没有打开?会不会是 “设想3”的stdout呢?

该字符串出现在源码 init/main.c。尝试打开/dev/console作为标准输入/输出/错误,节点的信息照抄 本地PC的 “ls -l /dev/console”。照葫芦画瓢创建节点。

sudo mknod -m 622 console c 5 1

再次上电测试成功看到 “Hello world”

为什么延时2秒

延时2秒是为了看效果,系统正常运行时是不允许PID 1退出,它很特殊起到脱孤进程的作用,一旦退出系统认为出大事咯,立即打印出堆栈信息,并停止运行。

基于AM335X开发板 ARM Cortex-A8——NAND FLASH版本核心板使用说明

前 言:

NAND FLASH版本和eMMC版本核心板使用方法基本一致。本文主要描述U-Boot编译、基础设备树文件编译、固化Linux系统NAND FLASH分区说明和NAND FLASH启动系统、固化Linux系统、AND FLASH读写测试等,NAND FLASH版本与eMMC版本核心板在使用方面的不同之处,相同之处将不重复描述。

创龙科技TL335x-EVM-S是一款基于TI Sitara系列AM3352/AM3354/AM3359 ARM Cortex-A8高性能低功耗处理器设计的评估板。

评估板接口资源丰富,引出双路千兆网口、LCD、HDMI、GPMC、CAN等接口,方便用户快速进行产品方案评估与技术预研,应用在通讯管理、数据采集、人机交互、运动控制、智能电力等典型领域。

U-Boot编译

进行U-Boot编译选项配置时,请执行如下命令。

Host# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_evm_s_nandboot_defconfig

图 1

我司提供经过验证的U-Boot镜像文件位于产品资料“4-软件资料\Linux\U-Boot\image\u-boot-2017.01-[Git系列号]-[版本号]\”目录下,分别为MLO-nand、u-boot.img-nand。系统启动卡制作完成后,请将MLO-nand和u-boot.img-nand文件复制到系统启动卡BOOT分区下,备份原有的eMMC版本MLO、u-boot.img文件,并将MLO-nand和u-boot.img-nand文件重命名为MLO、u-boot.img。

图 2

Host# sudo cp MLO-nand MLO

Host# sudo cp u-boot.img-nand u-boot.img

图 3

基础设备树文件编译

基础设备树源文件为内核源码“arch/arm/boot/dts/”目录下的tl335x-evm-s-nandflash.dts和tl335x-evm-s-nandflash-hdmi.dts,重新编译基础设备树时请使用此文件。我司提供经过验证的基础设备树文件为产品资料“4-软件资料\Linux\Kernel\image\linux-rt-4.9.65-[Git系列号]-[版本号]\”目录下的tl335x-evm-s-nandflash.dtb和tl335x-evm-s-nandflash-hdmi.dtb,请将其分别复制到系统启动卡rootfs分区以及rootfs-backup分区的boot目录下。

图 4

请执行如下命令将tl335x-evm.dtb软链到tl335x-evm-s-nandflash.dtb文件。tl335x-evm-s-nandflash.dtb支持LCD显示,如需使用HDMI显示,则将tl335x-evm.dtb软链到tl335x-evm-nandflash-hdmi.dtb文件即可。

Host# sudo rm tl335x-evm.dtb

Host# sudo ln -s tl335x-evm-s-nandflash.dtb tl335x-evm.dtb

Host# ls -l

图 5

使用替换了U-Boot和基础设备树文件的Linux系统启动卡启动评估板,进入文件系统执行如下命令可查看到NAND FLASH分区信息,即说明文件替换成功。

Target# cat /proc/mtd

图 6

固化Linux系统

本章节介绍Linux系统固化过程,包括固化U-Boot、内核、设备树和文件系统至NAND FLASH。

NAND FLASH分区说明

进入评估板系统后执行如下命令,查看NAND FLASH分区信息。

Target# cat /proc/mtd

图 7

表 1

NAND FLASH

MTD0

nand.spl:存放U-Boot第一阶段启动文件MLO

MTD1

nand.u-boot:存放U-Boot第二阶段启动文件u-boot.img

MTD2

nand.env:存放环境变量

MTD3

nand.devicetree:存放设备树文件

MTD4

nand.kernel:存放内核镜像

MTD5

nand.logo:存放LOGO文件

MTD6

nand.mini-fs:备用分区,一般存放小型文件系统(暂未使用)

MTD7

nand.rootfs:存放文件系统

固化Linux系统

Linux系统启动卡制作时,已将系统固化的脚本文件mknandboot.sh复制到了Linux系统启动卡文件系统的“/opt/tools/”目录下。

图 8

执行如下命令进行一键固化。

Target# /opt/tools/mknandboot.sh

图 9

脚本会进行如下操作:

擦除NAND FLASH。将Linux系统启动卡BOOT分区中的U-Boot、LOGO固化至NAND FLASH对应分区。将Linux系统启动卡rootfs-backup分区中的文件系统boot目录下的内核镜像和基础设备树文件固化至NAND FLASH对应分区。将Linux系统启动卡rootfs-backup分区中的文件系统固化至NAND FLASH对应分区。

用时约5~10min,Linux系统固化成功,同时串口调试终端打印提示信息。

从NAND FLASH启动系统

评估板断电,将Linux系统启动卡从评估板Micro SD卡槽中取出,根据评估底板丝印将拨码开关拨为10110(1~5),此档位为NAND FLASH启动模式。评估板上电,串口调试终端将会打印如下类似启动信息。

图 10

图 11

NAND FLASH读写测试

本章节对NAND FLASH的MTD6分区进行读写速度测试。MTD6是NAND FLASH的备用分区,一般存放小型文件系统,大小为32MByte。读写测试会将该分区内容擦除,请做好数据备份。

执行如下命令查询NAND FLASH分区,确认MTD6分区大小(读写请勿超出分区大小),将该分区内容擦除。

Target# cat /proc/mtd

Target# flash_erase /dev/mtd6 0 0

图 12

NAND FLASH写速度测试

进入评估板文件系统,执行如下命令对NAND FLASH进行写速度测试。

Target# time dd if=/dev/zero of=/dev/mtd6 bs=1024k count=30

图 13

此处一共写30MByte测试数据到NAND FLASH的MTD6分区下,可看到本次测试的NAND FLASH写速度约为:30MByte/7.79s=3.85MB/s。

NAND FLASH读速度测试

重启评估板,进入评估板文件系统,执行如下命令对NAND FLASH进行读速度测试。

Target# time dd if=/dev/mtd6 of=/dev/null bs=1024k count=30

图 14

此处从NAND FLASH的MTD6分区读取30MByte数据,可看到本次测试的NAND FLASH读速度约为:30MByte/4.44s=6.75MB/s。

相关问答

iphone现在开不了机了 出现以下英文[ NAND ]-FindFlashMediaAn...

这是硬件故障问题没办法自己维修,去厂家返修吧,不是刷固件能解决的,到售后应当几乎换全部。有用(0)回复HAC上图片有用(0)回复qinyuntao学习英语,或者送...

3ds如何备份 nand ?

要备份3DS的nand,首先需要安装一个自制软件,比如GodMode9。然后,将SD卡插入电脑,复制并备份SD卡上的所有文件。接下来,在3DS主界面上,启动GodMode9软件,...

为什么我复制到U盘的文件不能用?

盘f...之后,在出来的命令窗口输入convertf:/fs:ntfs/x注意,那个x意思是你的u盘的盘符。比如,你的u盘叫可移动磁盘f,就要把x改成f,之后就行了。U盘为什么...

插入读卡器没反应是怨什么

[回答]卡插入插槽,端口与计算机相连并安装所需的驱动程序之后,计算机就把存储卡当作一个可移动存储器,从而可以通过读卡器读写存储卡。按所兼容...按所兼...

gw怎么做虚拟 系统 ?

1.sd卡放上最新2.3b的launcher.dat,在根目录2.系统设置→その他设定→ユーザー情报,最后按住L键点击DSソフト用设定3.进去后先选择backupnand,然后等待,不要...

Gw卡怎样升级虚拟 系统 ?

要好好看升级说明啊你刷完红卡只是进入了gateway模式和升级没关系的你要做的事情是进入gateway菜单儿先备份下你的nand大概1g左右然后用电脑把备份好的...

为什么nfs一直挂载失败-ZOL问答

在UNIX类操作系统上定义的网络服务有两层级别的权限设置,一是文件系统级别的权限设置,另一个是网络服务自定义的权限设置。参见有用(0)回复1830676226开发...

如何评价英特尔QLC M.2 SSD 660p?

整个M.2SSD采用单面设计,正面有两个NAND芯片空焊位置,加上了就可以组成2TB容量。下面先来看看CrystalDiskMark中的成绩,Intel660p1TB表现不错,顺序读写性......

link2sd是什么?

首先说在SD卡上安装程序,以两种方式为主,一个是APP2SD,另一个是Link2SD。这里提到的APP2SD是2.2以后系统中就包括的一种安装方式。在2.1之前App2SD也是第三方...

nandflash 最快读写速度?

NAND闪存的最快读写速度取决于具体的技术和规格。目前,高性能NAND闪存的读取速度可以达到几百兆字节每秒(MB/s),而写入速度通常在几十到一百多兆字节每秒之间...

 竹凉席  倾城雪演员表 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2025  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部