hi3519a uboot emmc
(4条消息)Hi3559AV100制作ext4文件系统和烧录emmc_阿Sir问道-CSDN博客_hi3559 emmc
首先生成所需文件系统,见本博客 2、使用工具生成EXT4文件系统 3、烧录文件系统 注意:烧写EXT4文件系统时候必须用mmc write.ext4sp 而不是mmc write,否则会报找不到文件系统错误。 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,3) Kernel command line: mem=512M console=ttyAMA0,115200 clk_ignore_unused rw rootwait root=/dev/mmcblk0p3 rootfstype=ext4blkdevparts=mmcblk0:1M(uboot.bin),20M(kernel),300M(rootfs.ext4),300M(app),10M(param),10M(backup.param),6000M(data) 4.2.1 命令说明 参数说明: device num:mmc的设备号,可以通过 mmc list 查询 为何这样计算呢?我们在系统开始的时候可以看到如下打印信息: 写操作: mmc write 2 0x90000000 0x600 0x10 0x200 ==》512字节 uboot 0x0 ~ 0xFFFFF size = 0x100000 setenv ipaddr 192.168.100.10 0x22000000 注解:0x5F000=190M rootfs.ext4 大小为170M mmc read 0 0x22000000 800 2000; bootm 0x22000000 0x22000000 加载到内存地址 2000 ==> 对应0x2000个块 =2000x16x512 =8192x512 /1024 = 4M 十一、利用tftp命令烧写系统文件 mmc erase 0 800 内核: mmc erase 800 2000 文件系统: mmc erase 2800 100000 十二、设置bootargs 和bootcmd 这两个参数!!!!!不然的话内核起不来 setenv bootargs 'mem=1024M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 blkdevparts=mmcblk0:1M(boot),4M(kernel),7200M(rootfs),-(user)' 1、重启按下ctrl+c进入boot界面下 2、setenv ipaddr 192.168.0.10 (设备ip) 3、启动tftpd32.exe, 在串口界面ping服务器IP是否联通 ping 192.168.0.92 4、按照约定分区烧写 mmc read dev addr blk# cnt offset/0x200 = blk, size/0x200=cnt 512 字节 = 0x200 190M 0xBE00000 0x5F000 mw.b 0x82000000 ff 0x100000; tftp 0x82000000 u-boot-hi3559av100.bin mw.b 0x82000000 ff 0x900000;tftp 0x82000000 uImage_hi3559av100_multi-core 0x22000000 mw.b 0x82000000 ff 0x1E00000;tftp 0x82000000 rootfs_hi3559av100_T19021302.cramfs 注解:0x5F000=190M rootfs.ext4 大小为170M mw.b 0x82000000 ff 0x6400000;tftp 0x82000000 app-T17051502.img mw.b 0x82000000 ff 0x500000;tftp 0x82000000 app-T17051502.img mw.b 0x82000000 ff 0x500000;tftp 0x82000000 app-T17051502.img mw.b 0x82000000 ff 0x1ACC00000;tftp 0x82000000 u-data-hi3521a.jffs2 5、reset设备 0xDAC000 ./make_ext4fs -s -l 7200M rootfs_hi3559av100.ext4 ./rootfs
mw.b 0x82000000 ff 0x12C00000;tftp 0x82000000 STM_ROOTFS_T19022801
mmc erase A800 96000; mmc write.ext4sp 0 0x82000000 A800 96000
问题解决 No filesystem could mount root, tried: ext4
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.37 #2
Hardware name: Hisilicon HI3559AV100 DEMO Board (DT)
Call trace:
[
[
[
[
[
[
[
[
[
[
Kernel Offset: disabled
Memory Limit: 512 MB
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,3)
4、CONFIG_BOOTARGS配置如下对mmc进行读写操作
读操作命令: mmc read
写操作命令: mmc write
addr:内存地址 linux 内存RAM地址
blk# :mmc内的块号 mmc起始地址
cnt:块数目 mmc 每个块的大小是512字节
4.2.2 命令举例
读操作: mmc read 0 0x10800000 0x600 0x10
读操作说明:
从第0个mmc设备块上
blk mmc起始地址 1536*512个字节处开始(1536是0x600的十进制),
cnt 读取16×512个字节(16是10的10进制)
addr 到内存0x10800000 处。
以kernel为例,若前面的分区为94M(也就是kernel的分区从94M的地方开始),那么,0x600的地方的值应为:94*2*1024的十六进制0x2F000。
在上图中可以看到,每个块是512Bytes,因此kernel的启动地址为94*1024*1024改为94*1024*1024/512=94*2*1024。下面的计算方法相同。
写操作说明:把内存0x90000000开始,长度为16x512大小的数据,写入到第2个mmc设备块偏移位置为0x600处。换算关系
0x2000 ==》8K
0x100000 ==》1Mtongye
arch=arm
baudrate=115200
board=hi3519av100
board_name=hi3519av100
bootargs=mem=1024M console=ttyAMA0,115200 clk_ignore_unused rw rootwait root=/dev/mmcblk0p3 rootfstype=ext4 blkdevparts=mmcblk0:1M(u-boot.bin),4M(uImage),26624M(rootfs.ext4),-(user)
bootcmd=mmc read 0 0x22000000 800 2000; bootm 0x22000000
bootdelay=0
cpu=armv7
ethact=gmac0
soc=hi3519av100
stderr=serial
stdin=serial
stdout=serial
vendor=hisilicon
verify=n
kernel 0x100000 ~ 0x9FFFFF size = 0x400000
setenv serverip 192.168.100.100tongye 烧写内核
mmc erase 800 2000; mmc write 0 0x21000000 800 2000tongye 烧写rootfs
mw.b 0x21000000 ff 0x5F000;tftp 0x21000000 hi3519a/rootfs.ext4
mmc erase 0x2800 0x5F000; mmc write.ext4sp 0 0x21000000 0x2800 0x5F000
注意:烧写之前注意设置ip,如下红色标记所示,根据实际情况将serverip修改为自己虚拟机里面的ip
setenv ipaddr 192.168.1.188
setenv serverip 192.168.1.252
sa
一般情况下,uboot很少需要重新烧录
Uboot烧写:
mw.b 21000000 ff 100000
tftp 21000000 u-boot-hi3519av100.bin
mmc write 0 21000000 0 800
mw.b 21000000 ff 400000
tftp 21000000 uImage
mmc write 0 21000000 800 2000
mw.b 21000000 ff 8000000
tftp 21000000 rootfs.ext4
mmc write.ext4sp 0x0 0x21000000 0x2800 0xe10000 // 7G
(上面红色标记这个值的大小根据自己实际情况的文件系统大小填写,tftp下载完成后会有提示的)
setenv bootcmd 'mmc read 0 0x22000000 800 2000; bootm 0x22000000'
saveenv
这个就是产品出厂的烧写程序状态,不是前面第十点那个开发人员调试的NFS系统
setenv serverip 192.168.0.92 (服务器ip,pc)
emmc烧录: (8G) 1M(u-boot.bin),9M(kernel),30M(rootfs.cramfs),100M(app),5M(param),5M(backup.param),6860M(data)
uboot 0x0 ~ 0xFFFFF size = 0x100000
kernel 0x100000 ~ 0x9FFFFF size = 0x400000
rootfs 0xA00000 ~ 0x27FFFFF size = 0x1E00000
app 0x2800000 ~ 0x8BFFFFF size = 0x6400000
param 0x8C00000 ~ 0x90FFFFF size = 0x500000
backparam 0x9100000 ~ 0x95FFFFF size = 0x500000
data 0x9600000 ~ 0x1B61FFFFF size = 0x1ACC00000
mmc write dev addr blk# cnt
mmc erase blk# cntboot烧录
mmc erase 0 800; mmc write 0 0x82000000 0 800uImage 内核烧录
mmc erase 800 4800; mmc write 0 0x82000000 800 4800tongye桐烨烧写内核
mmc erase 800 2000; mmc write 0 0x21000000 800 2000rootfs 烧录
mmc erase 5000 F000; mmc write 0 0x82000000 5000 F000tongye桐烨烧写rootfs
mw.b 0x21000000 ff 0x5F000;tftp 0x21000000 hi3519a/rootfs.ext4
mmc erase 2800 0x5F000; mmc write 0 0x21000000 2800 0x5F000app 烧录
mmc erase 14000 32000; mmc write 0 0x82000000 14000 32000param 烧录
mmc erase 46000 2800; mmc write 0 0x82000000 4600 2800backup param 烧录
mmc erase 48800 2800; mmc write 0 0x82000000 48800 2800data 烧录
mmc erase 4B000 D6600; mmc write 0 0x82000000 4B000 D6600