tiny4412烧写uboot到emmc及更新kernel rootfs

uboot: https://github.com/zczjx/uboot_tiny4412

kernel: https://github.com/zczjx/linux-4.4.38-for-tiny4412

rootfs:https://github.com/zczjx/buildroot-es_udk

采用火哥大神的项目玩一玩tiny4412,本篇记录一下烧写的过程,中间走了一些弯路。

参考:http://wiki.100ask.org/Tiny4412

           https://www.cnblogs.com/pengdonglin137/articles/4161084.html

1.首先编译uboot,并用sd卡制作sd卡启动,这里不再详细说明。我们的目的是想把uboot烧写进emmc中。emmc其实和SD卡类似,都是SD设备,emmc是8-bit模式,SD是4-bit模式。TINY4412是eMMC4.4. 既然sd卡能烧,那么emmc一定可以烧。


2.在这里不得不讲一下DNW工具,这个可以通过USB把电脑端的文件烧录到目标板的内存中。附件是dnw Linux完整源码包,解要到一个文件夹,里面有dnw.c , Makefile, 预编译dnw(x86_64). 大家可以直接使用或是自己编译,编译后的dnw 可以复制到/usr/bin,并chmod 777 /usr/bin/dnw.

u-boot中也支持dnw指令,所以eMMC烧录就有可能了,因为电脑上的u-boot.bin固件可以通过dnw烧录到开发板的内存。到内存之后可以使用emmc write指令将uboot烧写进emmc中。

3.现在通过SD启动方式进入UBOOT中,在uboot中串口模式下输入:

>mmcinfo 0
省略......
>mmcinfo 1
Device: S5P_MSHC4
Manufacturer ID: 15
OEM: 100
Name: M4G1Y 
Tran Speed: 0
Rd Block Len: 512
MMC version 4.0
High Capacity: Yes
Size: 3728MB (block: 7634944)
Bus Width: 8-bit
Boot Partition Size: 2048 KB

上面两条指令分别执行,可以发现 mmc 0就是我们的SD卡,mmc 1设备就是我们要烧录的设备eMMC,uboot返回提示是8-bit,内存容量是4G的eMMC卡。

4.继续输入fdisk -p 0

 fdisk -p 1

partion #    size(MB)     block start #    block count    partition_Id 
   1           695          6070812         1424478          0x0C 
   2           320           134244          656304          0x83 
   3          2057           790548         4213770          0x83 
   4           520          5004318         1066494          0x83 

这两条指令是分别查看mmc 0/1设备的分区表信息。设备mmc1的分区信息,即eMMC分析,注意这个是superboot分区信息,我们就用这个分区。

分区1 是FAE分区, 分区2 是给system的,分区3是user-data, 分区4 是 cache.

5. 格式化eMMC, u-boot模式下输入如下指令来格式化eMMC设备

>fdisk -c 1 320 2057 520
执行后会返回分区信息,继续格式话分区1,2,3,4
>fatformat mmc 1:1
这句话意思是对mmc 1设备的第一分区格式作fat格式化。
>ext3format mmc 1:2
>ext3format mmc 1:3
>ext3format mmc 1:4

上面三个指令是分别对eMMC的分区2,3,4作ext3格式化。

到此我们完成了对eMMC的设备的格式化。

接下来我们要想办法烧录bl1.bin, bl2.bin, u-boot.bin, tzsw.bin烧录到eMMC中。

6. 从PC端下载固件到开发板Memory中。
刚才我们重点介绍了dnw, 接下来我们要使用此工具来下载固件到开发板内存中。注意是下载到内存,把固件数据缓存起来,到时要烧录到eMMC中。
首先我们要打开emmc设备
u-boot下输入:
>emmc open 1
eMMC OPEN Success.!!
                        !!!Notice!!!
!You must close eMMC boot Partition after all image writing!
!eMMC boot partition has continuity at image writing time.!
!So, Do not close boot partition, Before, all images is written.!
上面提示emmc开启成功,注意说明,emmc一旦打开,需要连续烧录,烧录完成后可以关闭emmc。

7.接下来我们要运行dnw

u-boot下面输入:
>dnw  0x50000000
OTG cable Connected!
Now, Waiting for DNW to transmit data
提示等待数据输入,这里就是等待我们从PC端通过DNW传送数据过来,其中0x50000000指明了将要把文件下载到tiny4412内存的0x50000000地址处,如果不带0x50000000会下载不成功。

在PC端运行:sudo dnw -a 0x50000000 E4412_N.bl1.bin

其中-a也指明了下载到0x50000000地址处。

然后再在uboot中:  mmc write 1 0x50000000 0 0x10

将内存中的文件烧写进emmc中。

依次烧写如下文件:

Uboot: dnw 0x50000000

PC:    sudo dnw -a 0x50000000 ../tiny4412_100_ask/uboot_tiny4412/sd_fuse/tiny4412/bl2.bin 

Uboot: mmc write 1 0x50000000 0x10 0x1c
--------------------------------------------------------
Uboot: dnw 0x50000000

PC:    sudo dnw -a 0x50000000 ../tiny4412_100_ask/uboot_tiny4412/u-boot.bin

Uboot: mmc write 1 0x50000000 0x30 0x230

--------------------------------------------------------
Uboot: dnw 0x50000000

PC:    sudo dnw -a 0x50000000 ../tiny4412_100_ask/uboot_tiny4412/sd_fuse/tiny4412/E4412_tzsw.bin 

Uboot: mmc write 1 0xc0000000 0x2c0 0xB8

Uboot: emmc close 1
 

这样就把uboot烧写进emmc中了。设置emmc启动,重启之后就可以看到uboot运行了。

接着设置环境变量,

setenv bootargs root=/dev/mmcblkp3 rootfstype=ext4 console=ttySAC0,115200n8 androidboot.console=ttySAC0 uhost0=n ctp=2 skipcali=y vmalloc=384m lcd=S70

saveenv

其中root=/dev/mmcblkp3指明了rootfs位于emmc分区的第三个分区、这个其实是跟fastboot烧写文件系统的位置有关系,是fastboot中指定的。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

上面只是烧写好了uboot,接下来烧写kernel,dtb,rootfs。

假设已经编译好了kernel,dtb,rootfs。

uboot:fastboot

[Partition table on MoviNAND]
ptn 0 name='fwbl1' start=0x0 len=N/A (use hard-coded info. (cmd: movi))
ptn 1 name='bl2' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 2 name='bootloader' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 3 name='tzsw' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 4 name='kernel-3-5' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 5 name='kernel-4-4' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 6 name='ramdisk' start=N/A len=0x6800(~27262976KB) (use hard-coded info. (cmd: movi))
ptn 7 name='dtb' start=N/A len=0x800(~2097152KB) (use hard-coded info. (cmd: movi))
ptn 8 name='rootfs_k35' start=0x418C800 len=0x501D8(~336027648KB) 
ptn 9 name='rootfs_k44' start=0x18202800 len=0x202605(~-2137517056KB) 
ptn 10 name='cache' start=0x98B83C00 len=0x822FF(~546044928KB) 
ptn 11 name='fat' start=0xB9443800 len=0xADE2F(~729332736KB) 
OTG cable Connected!

这里可以看到指明了rootfs_k44的起始地址为0x18202800,这个地址换算一下就能算出是从第几个block开始,512Byte = 1block

0x18202800   = 404760576 Byte 

404760576 / 512 = 790548  这个790548刚好是我们分区时第三个分区的起始地址

接着在下载一个在linux 端运行的fastboot工具。

fastboot flash kernel-4-4 arch/arm/boot/uImage

fastboot flash dtb arch/arm/boot/dts/exynos4412-tiny4412.dtb

fastboot flash rootfs_k44   rootfs.ext4_tiny4412 

reboot

最后系统就跑起来了。

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值