当前位置:首页 > 单片机 > 单片机
[导读]说 明:这是u-boot移植文档,移植到实验室的远峰s3c2410开发板(YF2410, 无NOR flash)。当时本来计划细化后分几部分贴在博客上,后来也没做这项工作。正好前几天转了一篇在skyeye上运行u-boot的文章,顺便贴出自己这

说 明:这是u-boot移植文档,移植到实验室的远峰s3c2410开发板(YF2410, 无NOR flash)。当时本来计划细化后分几部分贴在博客上,后来也没做这项工作。正好前几天转了一篇在skyeye上运行u-boot的文章,顺便贴出自己这 篇:)

1, 基本思路

==========

(1)思路

看参考资料(1),(2)对u-boot有了基本了解, 但没有把握。尝试进行修改后,感觉不理解。于是尝试u-boot在ram中运行,当时觉得使用ICE很没有把握,毕竟没怎么用过,上网查资料,在"ADS 调试经验"文章中看到了方法,尝试几次后才成功。后来阅读读u-boot和vivi相关代码,结合s3c2410文档和"ARM SOC体系结构"学习汇编语言,这样对bootloader第一阶段有了直接的了解,感觉心里有底了,这时"boot from nand flash"等文档已经找到,感觉如果第一阶段成功,第二阶段会更有把握"。最初的第一阶段移植没有遇到什么困难。

在第二阶段一直中参考了vcam9开发板和"boot from nand flash",只是在"CFG_NO_FLASH"和"ENV"遇到些问题,认真分析后随即解决。

这时反过来再修改第一阶段代码,在"move r10, lr"等语句的修改后,u-boot启动失败,第二天决定分析汇编语言,根据记忆查"skyeye"那本书,找到ojbectdump这个工具,反汇编后,问题解决。

总的来说,最大的问题就是基本工具的使用包括ICE,Makefile,binutils等。另外,高质量的文档不多。

(2)版本:arm-linux.gcc 3.3.2, u-boot 1.2.0。

(3) 与其它文档的不同点

(3)-1,更注意将来的可移植性,u-boot第一阶段从NAND flash到RAM的搬移代码移植性更好,并且没有加入mem_clear代码。

(3)-2,更注意代码是否清楚,nand_legacy_rw的cmd参数直接使用宏定义,而不是数字;

(3)-3,把内容解释清楚,不仅仅是操作文档,

(4) 编译器:3.3.2,使用3.4.1会出错。

2, 基础

=======

(1)基础知识:

bootloader: 移植前要了解bootloader基本原理,看"嵌入式系统bootloader技术内幕.pdf"

arm汇编:边移植边学习,参考s3c2410手册和ARM SOC体系结构学习,需要了解APCS(ARM过程调用标准)

(2)u-boot使用说明:仅介绍引导内核所需命令:

(2)-1打补丁:

假设你已经进入要解压缩u-boot的目录,例如"/usr/src/s3c2410/"。且补丁文件"u-boot-1.2.0_patch_20070911_1317"位于该目录。用管理员权限,因为编译u-boot也需要管理员权限。

tar jxvf u-boot-1.2.0.tar.bz2

cd u-boot-1.2.0

patch -p1 < ../u-boot-1.2.0_patch_20070911_1317

(2)-2编译u-boot

(2)-3烧写flash

(2)-4下载Linux内核。

A,用mkimage生成u-boot引导所需映像:

[root@localhost tools]# ./mkimage -A arm -O Linux -T kernel -C none -a

0x30008000 -e 0x30008000 -n Linux2.6.14 -d zImage_2054 zImage_2054_mk

Image Name: Linux2.6.14

Created: Wed Sep 5 20:47:53 2007

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 976804 Bytes = 953.91 kB = 0.93 MB

Load Address: 0x30008000

Entry Point: 0x30008000

见"s3c2410/bootloader/u-boot/BootLinux",tftpboot是使用go启动失败的例子;tftpboot_successful是使用bootm成功的例子。zImage_2054也在同一个目录。

B, 下载Linux内核,这里只说明windows下使用tftp的方法。Linux方法见"ARM_Yuanfenglog-20070313.txt"。

windows下是使用tftpd32提供tftp服务,不需要设置,安装后即可使用。

tftpboot 31000000 zImage_2054_mk

TFTP from server 172.23.19.132; our IP address is 172.23.19.60

Filename 'zImage_2054_mk'.

Load address: 0x31000000

Loading: *^H#################################################################

#################################################################

#############################################################

done

Bytes transferred = 976868 (ee7e4 hex)

设置环境变量:

setenv gatewayip 172.23.19.254

保存环境变量:

saveenv

注:根据代码和文档,当环境变量"autostart=yes"时,tftpboot会自动引导下载的内核。这个没有试验,待做。

C, 验证内核是否正确:

YF2410 # bootm 31000000

## Booting image at 31000000 ...

Image Name: Linux2.6.14

Created: 2007-09-05 20:47:53 UTC

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 976804 Bytes = 953.9 kB

Load Address: 30008000

Entry Point: 30008000

Verifying Checksum ... OK

OK

Starting kernel ...

Uncompressing

Linux................................................................ done,

booting the kernel.

Linux version 2.6.14 (root@localhost.localdomain) (gcc version 3.4.1) #1 Wed

Aug 22 20:56:33 GMT 2007

......

D, 内核启动正确,烧写到flash中,并且设置启动参数:

tftpboot 31000000 zImage_2054_mk

TFTP from server 172.23.19.132; our IP address is 172.23.19.60

Filename 'zImage_2054_mk'.

Load address: 0x31000000

Loading: *^H#####################################T############################

##########################################T #######################

#############################################################

done

Bytes transferred = 976868 (ee7e4 hex)

YF2410 # nand erase 40000 f0000

NAND erase: device 0 offset 262144, size 983040 ...

OK

YF2410 # nand write 31000000 40000 f0000

NAND write: device 0 offset 262144, size 983040 ...

983040 bytes written: OK

YF2410 # setenv bootcmd nand read 31000000 40000 f0000;bootm 31000000

YF2410 # saveenv

Saving Environment to NAND...

Erasing Nand...Writing to Nand... done

注意,这里的偏移设置要和Linux内核中设置的NAND flash分区一致。这里对应kernel分区。

(2)-5,重启开发板:

U-Boot 1.2.0 (Sep 5 2007 - 10:08:14)

DRAM: 64 MB

NAND: 64 MB

In: serial

Out: serial

Err: serial

Hit any key to stop autoboot: 2 ^H^H^H 1 ^H^H^H 0

NAND read: device 0 offset 262144, size 983040 ...

983040 bytes read: OK

## Booting image at 31000000 ...

Image Name: Linux2.6.14

Created: 2007-09-05 20:47:53 UTC

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 976804 Bytes = 953.9 kB

Load Address: 30008000

Entry Point: 30008000

Verifying Checksum ... OK

OK

Starting kernel ...

Uncompressing

Linux................................................................ done,

booting the kernel.

......

3, u-boot移植过程:

=================

本 次移植使用u-boot1.2.0,还不会用git,如果进一步做移植还是使用最新版比较好。整个的u-boot移植完成了两部分:(1)u-boot第 一阶段移植,完成从flash到sdram的复制;(2)u-boot第二阶段移植,完成nand legacy操作函数,saveenv函数;

(1)u-boot在ram中运行

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

目的:验证u-boot能否正常启动,为下一步工作打基础;

编译方法:

make distclean #彻底删除make产生的文件中间文件,如果开发过程中修改了目录,需要

#distclean,否则依赖关系是旧的,无法编译。一般下使用"make

# clean"删除中间文件即可。

make smdk2410_config #配置u-boot为smdk2410配置文件,待做结合此看懂

#"mkconfig"文件

make ARCH=arm #编译u-boot,执行体系结构是ARM

u- boot在ram中运行成功,日志见"s3c2410/bootloader/u-boot/in_ram",具体过程见"AXD_u- boot_ram_log",起始地址是从include/configs/smdf2410.h文件CFG_LOAD_ADDR宏看到的 (0x33000000)。

第一次做loadbinary(lb)时,System Output Monitor的Debog Log选项卡会显示Warning,>说映象有错,没管它,继续进行,可以启动u-boot。后来这个Warning也不出出现了。这样>对 flash的移植就有了基础。继续加油!

AXD运行bin文件的方法参考了"ARM ADS中的AXD 调试经验集锦",axf文件与bin文件的区别>见"ARM映象文件及执行机理001"。

运行: AXD操作日志和u-boot启动日志以及u-boot.bin见"s3c2410/bootloader/u-boot/in_ram"

注:如果链接出错,可能是编译器的问题,用3.4.1不行,3.3.2就可以,很奇怪。这和注>释里面提到的需要用3.4以上编译起矛盾(待做,查那个文档的名字),下面是当时错误的记录:

cd /usr/src/s3c2420-linux/bootloader/u-boot-1.2.0 && arm-linux-ld -Bstatic -T

/usr/src/s3c2420-linux/bootloader/u-boot-1.2.0/board/YF2410/u-boot.lds -Ttext

0x33F80000 $UNDEF_SYM cpu/arm920t/start.o

--start-group lib_generic/libgeneric.a

board/YF2410/libYF2410.a cpu/arm920t/libarm920t.a

cpu/arm920t/s3c24x0/libs3c24x0.a lib_arm/libarm.a fs/cramfs/libcramfs.a

fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a

fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a

rtc/librtc.a dtt/libdtt.a drivers/libdrivers.a drivers/nand/libnand.a

drivers/nand_legacy/libnand_legacy.a drivers/sk98lin/libsk98lin.a

post/libpost.a post/cpu/libcpu.a common/libcommon.a --end-group -L

/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1 -lgcc

-Map u-boot.map -o u-boot

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2023年2月16日 /美通社/ -- 近日,诺华中国宣布与中国红十字基金会正式启动"中国地中海贫血救助项目"广西地区专项援助,将在当地定向资助困难家庭地中海贫血患儿,同时通过相关医生培...

关键字: BSP 控制 移植 大众

北京2022年12月7日 /美通社/ -- 2022年12月3日,由高博医学(血液病)广东研究中心南方春富(儿童)血液病研究院、南方医科大学南方医院共同主办的高博医学论坛·华南造血干细胞移植论坛通过线下线上...

关键字: 移植 HD PID 血细胞

捐款近4000万 上海2022年12月7日 /美通社/ -- 2022年12月7日下午,中芯国际"芯肝宝贝计划"十年纪念暨2022年度捐赠仪式在上海仁济医院举行。十年来,该项目捐赠善款总额近4000...

关键字: 中芯国际 移植

北京2022年11月14日 /美通社/ -- 2022年10月,高博医学(血液病)北京研究中心北京高博博仁医院造血干细胞移植科迎来了五周岁"生日"。在吴彤主任带领下,移植科于2017年从无到有,历经五...

关键字: 移植 OS MT CD

上海2022年11月6日 /美通社/ -- 在第五届中国国际进口博览会期间,武田制药携5款创新产品亮相武田罕见遗传与血液疾病领域专场发布会。用于移植后抗巨细胞病毒(CMV)感染或疾病治疗[1]的马立巴韦[2]迎来&quo...

关键字: 移植 BSP CD FDA

亘喜生物科技集团宣布正在中国开展的、旨在全面评估GC007g治疗复发/难治性急性B淋巴细胞白血病效果的1/2期注册性临床试验顺利进入2期研究阶段,首例入组患者已给药。GC007g是亘喜生物旗下的一款靶向CD19的供者来源...

关键字: 移植 CD

北京2022年9月9日 /美通社/ -- 诺诚健华(香港联交所代码:09969)今天宣布,tafasitamab (Minjuvi®)联合来那度胺治疗不适合自体干细胞移植 (ASCT) 条件的复发/难治弥漫性大B...

关键字: VI NJU BSP 移植

苏州2022年8月19日 /美通社/ -- 近日,华中科技大学同济医学院附属协和医院心外科董念国教授团队运用与心擎医疗联合研发的短中期体外全磁悬浮心室辅助装置MoyoAssist®,成功救治三例危重的终...

关键字: 磁悬浮 移植 IC 静脉

上海2022年8月17日 /美通社/ -- 2022年8月16日,聚焦于基因和细胞治疗的上海邦耀生物科技有限公司(以下简称"邦耀生物")宣布,其...

关键字: CD 移植 BSP ISP

苏州2022年6月28日 /美通社/ -- 2022年6月23日,首都医科大学附属北京安贞医院(以下简称安贞医院)与苏州心擎医疗技术有限公司(以下简称心擎)在北京、苏州两地线上连线,隆重召开体外心室辅助系统临床...

关键字: BSP 磁悬浮 创始人 移植
关闭
关闭