友善之臂tiny4412使用DNW将uboot烧录到emmc

来源:互联网 发布:网络摄像头安装教程 编辑:程序博客网 时间:2024/05/17 06:27

在上一篇博客的基础上,将uboot烧录到板上的emmc
上一篇博客地址:http://blog.csdn.net/chicken_wing_is_good/article/details/50082843

1.下载linux版的DNW工具。http://download.csdn.net/detail/chicken_wing_is_good/9308397
我是解压至~/friendlyARM下面,其实这个工具放哪里都无所谓只要你找得到。
#tar zxvf DNW4Linux.tar.gz -C ~/friendlyARM
2.查看开发板的usb设备id等信息
将usb转RS232连接开发板和电脑,将miniUSB线连接开发板和电脑;连接电源线。将bootmode拨到从SD卡启动,上电开机,停留在uboot的接受命令界面。电脑端打开终端,输入
#lsusb
输入lsusb出现如下界面
找到倒数第二行“04e8:1234 Samsung Electronics Co., Ltd”,记下04e8:1234。
3.修改USB驱动
#cd ~/friendlyARM/DNW4Linux
#make clean
#cd kernel_module
#vim secbulk.c
找到26行,使用前面的04e8:1234替换0xaabb,0xccdd

 23 static struct usb_class_driver secbulk_class; 24  25 static struct usb_device_id secbulk_table[]= { 26     { USB_DEVICE(0xaabb, 0xccdd)}, 27     { } 28 };

#make
#sudo insmod secbulk.ko
#dmesg
看到如下信息就表示加载驱动成功dmesg

4.修改dnw工具
在gtkterm串口终端窗口中输入
#dnw 0xc0000000
此时会出现如下界面:
dnw 0xc0000000
切换到linux终端,输入
#ls /dev
出现如下画面:
ls dev
在sda*的后面可以看到secbulk1这个设备文件出现。
ps:一定要先在串口终端输入dnw命令才能在linux终端看到secbulk1设备。
接下来,修改dnw工具的源文件:
#cd ~/friendlyARM/DNW4Linux/app
#vim dnw.c
找到如下所示的第十行位置,将secbulk2修改为我们上面查看到的secbulk1,如果你在上面看到的是secbulk0,那么此处就修改为secbulk0。

  9  10 const char* dev = "/dev/secbulk2"; 11 

保存之后,
#make
5.烧录uboot到emmc详细过程
以下步骤转载自http://www.arm9home.net/read.php?tid=83474, 这里我也重复一下:

进入u-boot/sd_fuse/执行make,可以生成mkbl2工具,
进入u-boot/sd_fuse/tiny4412目录下可以看到bl2.bin E4412_N.bl1.bin E4412_tzsw.bin三个bin,其中bl2.bin在制作SD启动卡时会生成,我们也需要此文件。

下面讲如何使用dnw下载固件到开发板内存, 注意本人是以Ubuntu环境来调试,使用Windows的朋友自己对照流程。

1 下载附件dnw编译,上面已经讲了,
2 按照友善文档,制作SD启动卡,开发板SW2开关选择SD启动.
3 把串口先连接PC与开发板。
4 插制作好的SD卡到开发板,并给开发板上电SW1.
5 键盘按任意键盘进入uboot终端,此时输入help可以看到很多指令。

6 现在我们进入了SD卡模式启动的u-boot. 现在我们看下mmc设备信息:
u-boot模式下输入:

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卡。

7 继续输入:

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.

8 格式化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中。

9 从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.

10 接下来我们要运行dnw
u-boot下面输入:

dnw
OTG cable Connected!
Now, Waiting for DNW to transmit data
提示等待数据输入,这里就是等待我们从PC端通过DNW传送数据过来。

此时在PC端终端串口,cd到u-boot目录所在路径
user@~/u-boot/:
输入: dwn sd_fuse/tiny4412/E4412_N.bl1.bin

此时u-boot中断会提示传送校验完成,此时已经把bl1.bin通过USB传送到了memeory的0xc0000000起始地址,大小8KB.
接下来我们烧录bl1.bin到eMMC中,u-boot下继续输入:

mmc write 1 0xc0000000 0 0x10
会提示写入信息,说明已经写入成功。这个是把刚才从PC端通过dnw下载下来的bl1.bin固件下载到emmc中,起始0, 16个block, 一个block是512B, 16*512=8*1024=8KB. 这个是bl1.bin的存放位置。

以此类推,烧录bl2.bin. u-boot.bin, tzsw.bin

u-boot终端继续输入:

dnw
PC端输入: (注意输入内容是以 dnw 开始的,前面是当前路径,便于理解)
user@~/u-boot/: dwn sd_fuse/tiny4412/bl2.bin
u-boot下继续输入:
mmc write 1 0xc0000000 0x10 0x1C
bl2.bin实际大小约14K,分配的空间是16K. 其实是第16个block开始,写入28个block, 28*512B=14*1024=14K
注意这个区域预分配是32个Block,所以下一个开始是32+16=48

u-boot终端继续输入:

dnw
PC端输入: (注意输入内容是以 dnw 开始的,前面是当前路径,便于理解)
user@~/u-boot/: dwn u-boot.bin
u-boot下继续输入:
mmc write 1 0xc0000000 0x30 0x21D
u-boot.bin实际大小约270K,分配的空间是328K. 其实是第48个block开始,写入541个block, 541*512B=270.5*1024 约270K

u-boot终端继续输入:

dnw
PC端输入: (注意输入内容是以 dnw 开始的,前面是当前路径,便于理解)
user@~/u-boot/: dwn sd_fuse/tiny4412/E4412_tzsw.bin
u-boot下继续输入:
mmc write 1 0xc0000000 0x2c0 0xB8
tzsw.bin实际大小约92K,分配的空间是160K. 其实是第704个block开始,写入184个block, 184*512=92*1024=92K

启动分区到此全部写入完成,注意一定要关闭emmc,
u-boot下继续输入:

emmc close 1
eMMC CLOSE Success.!!
关闭emmc设备,提示关闭成功。此时我们已经把启动文件全部烧录到了eMMC中。

接下来我们可以把开发板的SW2拨动到NAND启动,同时u-boot中断输入reset, 并在电脑键盘按下任意键,此时我们可以看到:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
U-Boot 2010.12-00000-g3e284d5-dirty (Jul 04 2014 - 17:40:58) for TINY4412

CPU: S5PC220 [Samsung SOC on SMP Platform Base on ARM CortexA9]
APLL = 1400MHz, MPLL = 800MHz

Board: TINY4412
DRAM: 1023 MiB

vdd_arm: 1.2
vdd_int: 1.0
vdd_mif: 1.1

BL1 version: N/A (TrustZone Enabled BSP)

Checking Boot Mode … EMMC4.41
REVISION: 1.1
MMC Device 0: 3728 MB
MMC Device 1: 1876 MB
MMC Device 2: N/A
Read… Bootmode reg 0x00000000
Get Bootmode reg 0xf3ca4c36
ModeKey Check… run normal_boot
Net: No ethernet found.
Hit any key to stop autoboot: 0
TINY4412 #
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

大功告成啊,我们的u-boot已经成功写入到了eMMC中,并可以成功启动。

0 0
原创粉丝点击