时间:2018.4.6 作者:Tom 工作:HWE 说明:如需转载,请注明出处。已注明转载
1.Led灯的实验
目的:在lowleve_init前后加一个灯。
目标:九鼎X210开发板上的三个灯,GPJ0_3,GPJ0_4,GPJ0_5
需要的寄存器:
GPJ0CON 0xE020_0240
GPJ0_DAT 0xE020_0244
GPJ0PUD 0xE020_0248
GPJ0DRV 0xE020_024C
GPJ0CONPDN 0xE020_0250
GPJ0PUDPDN 0xE020_0254
操作的目标文件:start.S
增加的指令函数:注意我这里没使用读改写的步骤,不够规范。
增加灯的代码位置:
然后回到主目录,
第一步:make distclean
第二步:make
生成u-boot.bin文件。下面我们讲一下怎么把我们的uboot.bin文件刷到SD卡中。主要分线刷和卡刷。
2.将uboot.bin刷到SD中
2.1破坏开发板中inand中的uboot
1)uboot中破坏uboot
a.在inand的uboot底下擦除uboot有两种方法:一种是movi指令,一种是mmc指令,哪一种都可以。
执行(输入):
#:movi write u-boot 0x30000000
//将内存0x30000000里面的内容(应该全部是0)写入到u-boot分区(inand)里面
执行命令完毕后,画面显示:
重启X210,发现串口中输出,表明头部校验和失败,已经转入SD卡通道启动了。
再插入烧好的SD卡,即可启动。
b.在Sd卡的uboot下破坏uboot,这个不需要。我们刷卡的时候会把原来的覆盖。但是无法判断卡中的镜像是老的uboot,还是新的uboot。也就是说无法确定是否成功,但如果刷的uboot不对,肯定会有问题,能看出来。我尝试了将SD插在电脑上进行格式化,但结果里面的镜像还是存在的,比较奇怪。
2)系统中破坏uboot
1、android 系统控制台,执行如下指令:
#:busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync
#:sync
2、Linux系统控制台,执行如下指令:
#:busybox dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1 count=1 conv=sync
#:sync
以上所有的验证是在Android下测试的,Linux下操作是一样的。
3、开机,发现系统无法启动。出现如下的提示信息:
2.1 windows中刷SD卡
这个就不多说了,网上很多教程。但我使用九鼎官方的那个软件烧录SD卡,插上去是失败的。
首先要说的是,刷机很浪费时间。在工作中使用的工具以及方法又不一样。所以我觉得只要掌握一种方法即可。工作中用到的时候再去研究。你不可能为了刷机耗了好几天,得不偿失。公司找你研发不是为了刷机,是为了后面的研发,所以我们应该把重点放在后面,谨记!!!!
但是刷机不成功会让人很恼火的!!
https://www.cnblogs.com/zou107/p/5054631.html。
2.2 linux下使用DD命令刷机
工具:九鼎官方uboot文件下的sd_fusing目录。
-
对uboot源代码进行完修改(修改内容根据自己的理解和分析来修改)
-
make distclean然后make x210_sd_config然后make
-
编译完成得到u-boot.bin,然后去烧录。烧录方法按照裸机第三部分讲的linux下使用dd命令来烧写的方法来烧写。
-
烧写过程:
第一步:进入sd_fusing目录下
第二步:make clean
第三步:make
第四步:sd_fusing.sh的修改:确保下图中的bin文件名字是正确的。
第五步:插入sd卡,ls /dev/sd*得到SD卡在ubuntu中的设备号(一般是/dev/sdb,注意SD卡要连接到虚拟机ubuntu中,不要接到windows中)
第六步:./sd_fusing.sh /dev/sdb完成烧录(注意不是sd_fusing2.sh)
-
总结:uboot就是个庞大点复杂点的裸机程序而已,我们完全可以对他进行调试。调试的方法就是按照上面步骤,根据自己对代码的分析和理解对代码进行更改,然后重新编译烧录运行,根据运行结果来学习。
3.结果:三个常亮。