一:u-boot的简单移植
1.进入开发板提供的源码文件包,解压uboot源码包。
cd /home/bunfly/source_code/
tar xf uboot_tiny4412-20130729.tgz
2.进入uboot文件夹,更改uboot中tiny4412的配置文件。将225 中的Tiny4412更改为bunfly。
cd uboot_tiny4412
vim include/configs/tiny4412.h
更改255行为#define CONFIG_SYS_PROMPT "bunfly # "
3. 回到u-boot文件夹,编译u-boot
make tiny4412_config
make
4.进入sd_fuse文件夹 编译
cd sd_fuse
make
5.编译结束后生成tiny4412文件夹,进入文件夹。插入sd卡到电脑。烧写u-boot到sd卡中
cd tiny4412/
sd卡会自动加载,所以先卸载sd卡 umount /media/aaa
参看sd卡挂载点:fdisk -l 发现sd卡挂载在/dev/sdb中
烧写: ./sd_fusing.sh /dev/sdb
6.显示烧写成功后将sd插入开发板,开发板设置从sd卡启动。显示下图表示烧写成功。
二:u-boot中编写hello world 程序
U-Boot作为嵌入式Linux系统的引导,不具有标准C库中的内容。要使用printf函数,就需要u-boot中提供的。u-boot函数内容在u-boot源码文件中
的System.map文件中。System.map文件是被内核所使用的符号表。符号表是一个在符号名称与它们的存储器位置间的查询表格。符号名称可能是变量的名称或是函数名称。当要查询符号名称的位置或是特定位置的符号名称时,就会需要System.map。
查找System.map中printf中的位置 在538行, c3e114d8 T printf,使用c3e114d8就表示使用printf函数,下面是helloword函数的汇编代码实现:
1 .global main 2 main: 3 mov ip,sp 4 stmfd sp!,{fp,ip,lr} 5 sub fp,ip,#4 6 7 ldr r0, =string 8 ldr r2, haha 9 blx r2 10 11 sub sp,fp,#8 12 ldmfd sp,{fp,sp,pc} 13 14 haha: 15 .word 0xc3e114d8 16 string: 17 .asciz "hello world\n"