当前位置:首页 > 单片机 > 单片机
[导读]说 明:这是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

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭