hi3519a uboot emmc


原文链接: hi3519a uboot emmc

(4条消息)Hi3559AV100制作ext4文件系统和烧录emmc_阿Sir问道-CSDN博客_hi3559 emmc

首先生成所需文件系统,见本博客

2、使用工具生成EXT4文件系统

   ./make_ext4fs -s -l 7200M rootfs_hi3559av100.ext4 ./rootfs

3、烧录文件系统

  mw.b 0x82000000 ff 0x12C00000;tftp 0x82000000 STM_ROOTFS_T19022801
  mmc erase A800 96000; mmc write.ext4sp 0 0x82000000 A800 96000

注意:烧写EXT4文件系统时候必须用mmc write.ext4sp 而不是mmc write,否则会报找不到文件系统错误。

问题解决 No filesystem could mount root, tried: ext4

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,3)
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.37 #2
Hardware name: Hisilicon HI3559AV100 DEMO Board (DT)
Call trace:
[] dump_backtrace+0x0/0x198
[] show_stack+0x14/0x20
[] dump_stack+0x94/0xb8
[] panic+0x114/0x264
[] mount_block_root+0x29c/0x2b8
[] mount_root+0x74/0x84
[] prepare_namespace+0x164/0x1a0
[] kernel_init_freeable+0x1c0/0x1e0
[] kernel_init+0x10/0x100
[] ret_from_fork+0x10/0x30
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配置如下

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)

对mmc进行读写操作

4.2.1 命令说明
读操作命令: mmc read addr blk# cnt [partition]
写操作命令: mmc write addr blk# cnt [partition]

参数说明:

device num:mmc的设备号,可以通过 mmc list 查询
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。下面的计算方法相同。

写操作: mmc write 2 0x90000000 0x600 0x10
写操作说明:把内存0x90000000开始,长度为16x512大小的数据,写入到第2个mmc设备块偏移位置为0x600处。

换算关系

0x200 ==》512字节
0x2000 ==》8K
0x100000 ==》1M

tongye

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

uboot 0x0 ~ 0xFFFFF size = 0x100000
kernel 0x100000 ~ 0x9FFFFF size = 0x400000

setenv ipaddr 192.168.100.10
setenv serverip 192.168.100.100

tongye 烧写内核

0x22000000
mmc erase 800 2000; mmc write 0 0x21000000 800 2000

tongye 烧写rootfs

注解:0x5F000=190M rootfs.ext4 大小为170M
mw.b 0x21000000 ff 0x5F000;tftp 0x21000000 hi3519a/rootfs.ext4
mmc erase 0x2800 0x5F000; mmc write.ext4sp 0 0x21000000 0x2800 0x5F000

mmc read 0 0x22000000 800 2000; bootm 0x22000000

0x22000000 加载到内存地址

2000 ==> 对应0x2000个块 =2000x16x512 =8192x512 /1024 = 4M

十一、利用tftp命令烧写系统文件
注意:烧写之前注意设置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 erase 0 800
mmc write 0 21000000 0 800

内核:
mw.b 21000000 ff 400000
tftp 21000000 uImage

mmc erase 800 2000
mmc write 0 21000000 800 2000

文件系统:
mw.b 21000000 ff 8000000
tftp 21000000 rootfs.ext4

mmc erase 2800 100000
mmc write.ext4sp 0x0 0x21000000 0x2800 0xe10000 // 7G
(上面红色标记这个值的大小根据自己实际情况的文件系统大小填写,tftp下载完成后会有提示的)

十二、设置bootargs 和bootcmd 这两个参数!!!!!不然的话内核起不来

setenv bootargs 'mem=1024M console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootfstype=ext4 blkdevparts=mmcblk0:1M(boot),4M(kernel),7200M(rootfs),-(user)'
setenv bootcmd 'mmc read 0 0x22000000 800 2000; bootm 0x22000000'
saveenv
这个就是产品出厂的烧写程序状态,不是前面第十点那个开发人员调试的NFS系统

1、重启按下ctrl+c进入boot界面下

2、setenv ipaddr 192.168.0.10 (设备ip)
setenv serverip 192.168.0.92 (服务器ip,pc)

3、启动tftpd32.exe, 在串口界面ping服务器IP是否联通 ping 192.168.0.92

4、按照约定分区烧写
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 read dev addr blk# cnt
mmc write dev addr blk# cnt
mmc erase blk# cnt

offset/0x200 = blk, size/0x200=cnt

512 字节 = 0x200

190M 0xBE00000 0x5F000

boot烧录

mw.b 0x82000000 ff 0x100000; tftp 0x82000000 u-boot-hi3559av100.bin
mmc erase 0 800; mmc write 0 0x82000000 0 800

uImage 内核烧录

mw.b 0x82000000 ff 0x900000;tftp 0x82000000 uImage_hi3559av100_multi-core
mmc erase 800 4800; mmc write 0 0x82000000 800 4800

tongye桐烨烧写内核

0x22000000
mmc erase 800 2000; mmc write 0 0x21000000 800 2000

rootfs 烧录

mw.b 0x82000000 ff 0x1E00000;tftp 0x82000000 rootfs_hi3559av100_T19021302.cramfs
mmc erase 5000 F000; mmc write 0 0x82000000 5000 F000

tongye桐烨烧写rootfs

注解:0x5F000=190M rootfs.ext4 大小为170M
mw.b 0x21000000 ff 0x5F000;tftp 0x21000000 hi3519a/rootfs.ext4
mmc erase 2800 0x5F000; mmc write 0 0x21000000 2800 0x5F000

app 烧录

mw.b 0x82000000 ff 0x6400000;tftp 0x82000000 app-T17051502.img
mmc erase 14000 32000; mmc write 0 0x82000000 14000 32000

param 烧录

mw.b 0x82000000 ff 0x500000;tftp 0x82000000 app-T17051502.img
mmc erase 46000 2800; mmc write 0 0x82000000 4600 2800

backup param 烧录

mw.b 0x82000000 ff 0x500000;tftp 0x82000000 app-T17051502.img
mmc erase 48800 2800; mmc write 0 0x82000000 48800 2800

data 烧录

mw.b 0x82000000 ff 0x1ACC00000;tftp 0x82000000 u-data-hi3521a.jffs2
mmc erase 4B000 D6600; mmc write 0 0x82000000 4B000 D6600

5、reset设备

0xDAC000

`