【U-Boot】嵌入式Linux:一种当你更改了rc.local启动文件导致无法进入系统的解决办法

前提:

Linux内核Debian系统开发板,痛点是无外接显示屏,仅靠ModeXterm之类的终端进行串口和网口远程访问,系统已具有UBoot工具在开机阶段可按任意键进入uboot命令模式,错误修改了/etc/rc.local文件导致卡在了启动流程。由于是公司不知道屯了多久的板子,只有官方网站,没有开发光盘。我是小白,完全是误打误撞才用这个方式修复的。

一、进入U-Boot

使用断电、复位按键等方式重启系统,注意终端工具中打印倒计时时按下任意键,即可进入U-Boot命令模式:

二、找到文件系统地址

U-Boot的命令可适用两种格式文件系统,即fat和etx,没有用对命令是会读不到文件的。

U-Boot能够对ext2/3/4以及fat文件系统设备进行访问, 可使用fstype命令判断存储介质分区使用的是什么类型的文件系统(但是我的U-Boot里并没有这个命令)。

fatls查看存储设备的fat分区里的内容
ext2ls查看存储设备的ext2分区里的内容
ext4ls查看存储设备的ext4分区里的内容

好在我知道我的是Debian系统,ext4分区对应的就是Debian根文件系统。于是使用遍历法很快找到了我的文件位置:

三、将要修改的文件读取到内存中

fatload从fat分区里读出文件到指定的内存地址
ext2load从ext2分区里读出文件到指定的内存地址
ext4load从ext4分区里读出文件到指定的内存地址

要修改文件,就要先读取文件到DRAM 中,这个内存地址我也不知道有什么规律,反正不成功就换一个地址:

请记住这个文件的字节大小,到后面保存文件的时候要用到。

四、查看文本对应的内存地址

md   内存地址   //用于查看内存地址上的值
   用法:
   md.b 0x40008000 100    //从内存地址0x40008000开始,查看0x100个字节并输出值
   md.w 0x40008000 100    //从内存地址0x40008000开始,查看0x100个16位值并输出值
   md.l 0x40008000 100    //从内存地址0x40008000开始,查看0x100个32位值并输出值     

 本人的文件:

整个文件实际上是从0x87800000地址开始的,这里设置了从中间开始读取255个字节。

五、修改内存值

 mw    //用于修改内存地址上的值
        用法:
        mw.b 0x40008000  0xab  100  //从内存地址0x40008000开始的0x100字节空间,设值为0xab
        mw.w  0x40008000  0xabcd 100  //从内存地址0x40008000开始的0x200字节空间,每16位值设为0xabcd
        mw.l  0x40008000  0xabcdef88 100    //从内存地址0x40008000开始的0x400字节空间,每32位值设为0xabcdef88 

使用md.w命令,修改文件字符对应的地址内存值,我需要删除这段文字,即从0x878001ab地址开始,往后的33个值都更改为0x0a或0xff。

mw.b 0x878001ab 0a 0x21

然后重复md.b指令查看自己是否更改正确,若是发现改错了,可以重复步骤三重新打开文件。

六、将文件从内存覆盖到文件系统

fatwrite把内存上的数据存储到fat分区的一个文件里
ext2write把内存上的数据存储到ext2分区的一个文件里
ext4write把内存上的数据存储到ext4分区的一个文件里

我们要把内存中0x87800000地址开始的470字节的文件储存到文件系统:

这样就会将原先的rc.local覆盖掉。如果你写的是其他文件地址,就会覆盖其他的文件中的470个字节,或者这个路径没有这个文件的时候,会新建一个文件。

七、重启系统

rc.local文件被错误修改的问题已经解决了,使用uboot::reset命令重启系统吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值