hi3518ev200 从sd卡启动rootfs

2023-11-06 00:36
文章标签 启动 sd rootfs hi3518ev200

本文主要是介绍hi3518ev200 从sd卡启动rootfs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

板卡为 hisi 的 hi3518ev200,16M RAM,64M Flash。板卡不支持从SD卡启动,但是由于Flash空间有限,很多应用都放不下,因此考虑把 rootfs 放到 SD 卡中。先从 Flash 中启动 kernel,然后再加载 SD 卡中的 rootfs。

1. 准备rootfs

由于需要从sd卡中加载 rootfs,因此需要把我们编译生成的rootfs下载到sd卡中。这里我们使用 ext4 文件系统。

将sd卡通过读卡器接入到PC上,这里接入后,出来的分区设备是 /dev/sdc1,先将其格式化为 ext4:

umount /dev/sdc1
sudo mke2fs -t ext4 -F -L "rootfs" /dev/sdc1

格式化完成后,挂载分区,然后把编译的跟文件系统复制到这个分区中即可:

mkdir /tmp/rootfs
sudo mount /dev/sdc1 /tmp/rootfs
tar -xvf /media/linuxdata/workspace/buildroot-2022.02.8/output/images/rootfs.tar -C /tmp/rootfs/
umount /dev/sdc1

拔下sd卡,将其插到板卡上。

2. 挂载rootfs

由于默认uboot不支持emmc sd卡驱动,因此,无法从sd卡中加载kernel。所以先从 Flash 中加载 kernel,先将 kernel 和 initrd 加载 RAM中,然后运行kernel,kernel启动后,会先挂载 initrd 为初始的/,然后进行一系列的初始化后,再挂载真正的 rootfs。默认是从 Flash 中去挂载这个 rootfs,bootargs 参数为 setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'

这里需要将root参数修改为如下:

set bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mmcblk0p1 rw rootwait'

完整的参数如下:

set bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 init=/linuxrc'

我这里只要加了下面的参数(blkdevparts),就会报错导致挂载失败:

set bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 init=/linuxrc blkdevparts=mmcblk0:-(rootfs.ext4)'

失败报错如下:

mmc1: error -84 whilst initialising SD card
usb 1-1.2: new high-speed USB device number 4 using hiusb-ehci
mmc1: new high speed SDHC card at address 5048
mmcblk0: mmc1:5048 SD32G 29.7 GiBmmcblk0: p1(rootfs)
List of all partitions:
b300        31178752 mmcblk0  driver: mmcblkb301        31178752 mmcblk0p1 00000000-0000-0000-0000-000000000000
No filesystem could mount root, tried:  ext4
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,1)

那么,使用上面最简单的参数就可以了。

保存,然后启动:

sa
sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000

挂载成功:

mmc1: error -84 whilst initialising SD card
usb 1-1.2: new high-speed USB device number 4 using hiusb-ehci
mmc1: new high speed SDHC card at address 5048
mmcblk0: mmc1:5048 SD32G 29.7 GiBmmcblk0: p1
EXT4-fs (mmcblk0p1): warning: mounting fs with errors, running e2fsck is recommended
EXT4-fs (mmcblk0p1): recovery complete
EXT4-fs (mmcblk0p1): mounted filesystem with writeback data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:1.
devtmpfs: mounted
Freeing init memory: 148K
EXT4-fs (mmcblk0p1): re-mounted. Opts: (null)
devpts: called with bogus options
Starting syslogd: OK
Starting watchdogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
Initializing random number generator: OK
Saving random seed: OK
Starting iptables: OK
Starting network: OK
Starting dhcpcd...
dhcpcd-9.4.1 starting
sandbox unavailable: seccomp
DUID 00:01:00:01:c7:92:bc:85:00:00:00:00:00:00
sandbox unavailable: seccomp
forked to background, child pid 592
ADDRCONF(NETDEV_UP): eth0: link is not ready

启动成功,sd卡是一张32G的内存卡:

# df -hT
Filesystem           Type            Size      Used Available Use% Mounted on
/dev/root            ext4           29.0G    187.5M     27.3G   1% /
devtmpfs             devtmpfs       28.7M         0     28.7M   0% /dev
tmpfs                tmpfs          28.8M         0     28.8M   0% /dev/shm
tmpfs                tmpfs          28.8M     36.0K     28.8M   0% /tmp
tmpfs                tmpfs          28.8M     32.0K     28.8M   0% /run
#

这篇关于hi3518ev200 从sd卡启动rootfs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/353454

相关文章

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne