转载:http://blog.sina.com.cn/s/blog_9340c4f901010n48.html
1.来由:
1) 在网上下载一个u-boot源代码,我用的是1.1.2版本的,最新的应该是1.1.4的吧,其实差不多,那就像我那样下载一个1.1.2版本的吧。把源文件解压,这个应该不用说了吧,学过linux的人应该会,不会的话我想你继续做下去也困难,那就先装个linux用下吧(我用的是RedHat的,哦对了,编译程序是需要gcc编译器的,所以安装方式一定要选择工作站哦^_^)。好了,解压后你发现在u-boot.1.1.2目录下有Makefile这个文件吧?让我们看看它里面的内容,最简单的方法就是vi Makefile了。我们要看的是它选择的是哪一个交叉编译器。可以看到这一项:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
看到吧,也就是说这里所用的交叉编译器是arm-linux-gcc了,(u-boot默认是用这个的,也有用arm-elf-gcc的,网上有个工具包arm-elf-tools-20030314.sh,我试过用它来编译,没有问题,顺便提一下,arm-elf-gcc是用来编译uClinux内核的工具来的)那你就下载一个arm-linux-的交叉编译器吧,我是在网上下载EABI-4.3.3.tar.bz2这个文件,然后解压得到4.3.3版本的交叉编译工具的(具体设置参考网上)
这里提几个注意点:
1.不可用winRAR解压u-boot-1.1.2.tar.bz2或u-boot-1.1.2.tar.gz这种文件(就个可能新手会犯,一般熟悉linux命令的人应该都不会这样做吧,在此还是要提一下)
2.可能下载的文件有一些中间文件会阻碍编译的运行,所以在编译前最好来个彻底清除,在u-boot.1.1.2目录下运行命令:make distclean (其实这个命令在Makefile文件下就有)我当时为这个问题郁闷了很久,希望你们不会像我这样^_^);
3,有些人为了方便想在cygwin下编译,但是经常在网上看到在这个虚拟平台下编译有很多的问题,要配置的东西也多,而且好像我用过那个vi没有linux环境下的好用,所以最好还是不要用这个软件了吧,如果你真的离不开windows的话可以像我这样装个虚拟机,在虚拟机下再装linux的系统,具体参考这个网站):http://fedora.linuxsir.org/doc/vmware/
3)好了,现在开始测试你的交叉编译器搞好没有。在u-boot.1.1.2目录下执行如下命令:
1)
2)
3)
如果以上步骤都无误的话那么恭喜你,你的交叉编译环境可以用来编译你的u-boot源代码了,可以开始以下阶段。
u-boot移植日记2(新手必读)
3.移植:
说时迟那时快,现在开始移植工作(以下是我一步步重新做一遍,力求说得详细点,感谢我吧^_^)
我以B2板子的程序做为模板来做.
#cd u-boot-1.1.2
#cd board
#cp -R dave myboard (这是我取的板子名字,可以换上你的,但是后面的也要跟着来换哦^_^)
#cd myboard
#mv B2 myboards3c44b0 (自己取个板子名)
#cd myboards3c44b0
# mv B2.c myboards3c44b0.c
修改myboards3c44b0里面的Makefile, 把B2改成myboards3c44b0,编译时如果报的其它类似找不到B2的错误也是把相应的B2改成myboards3c44b0来处理。
1)其中的myboards3c44b0.c文件是板的初始化代码,看一下就知道,根据你的板上自带的44binit.s来修改吧。memsetup.S文件主要是存储器的初始化设置,其实也是44binit.s里面的一部分。
2)其实board这里要修改的不多,先跳过flash部分吧,我们来看一下cpu设置部分吧。
u-boot-1.1.2里面已经加入了对s3c44b0的支持,让我们来看一下cpu/s3c44b0里面的部分吧。
看到start.S这个文件了吗?要修改的其实并不多,按照你的板设置一下中断跳转矢量就行了,或者上网查一下吧,应该很容易看明的。其中cpu.c这个文件简直不用修改,再来看一下serial.c这个文件吧,改一下波特率的设置就行,就是你用多少M的CPU频率的话对应的波特率参数设置问题,其实B2已经做得不错的了,很多子程序都不用自己写的了^_^,在我的板上是这样设置的,参考一下吧:
#if CONFIG_S3C44B0_CLOCK_SPEED==66 ,把所有的这些66改成60,原因,我的实验板上用的频率是60(44B0最高频率为64M)。然后其它分频系数,寄存器初始化设置,可以参考一下44blib.c,在这里我给出我的设置出来吧,可以参考一下。
case 115200:
#if CONFIG_S3C44B0_CLOCK_SPEED==60
divisor = 32;
UFCON0 = 0x0;
我在这方面算术不好,所以都是参考人家的。
3)好,再加上个头文件:
cd u-boot-1.1.2/include/configs
cp B2.h myboards3c44b0.h
这个头文件其实要改的地方还挺多的,我等下再说怎样修改。先回到u-boot.1.1.2目录,
4)在Makefile里面加上这部分,不会的话就模仿B2来写吧^_^
在B2的这部分文件
B2_config
后面加上这部分:
myboards3c44b0_config
各项含义如下:
arm :
arm920t:
TQ2440: 开发板的型号(board),其对应于board/TQ2440的目录
NULL 开发者/经销商
s3c2440 片上系统/(SOC)
- 切记在@./mkconfig $(@:_config=) arm s3c44b0 myboard3c44b0 myboard前面的是Tab来的,万万不能用空格代替,因为它是靠这个来识别命令的!
5)好,现在可以在u-boot-1.1.2目录下执行如下命令:
Make distclean(还是用这个吧,比较彻底)
Make myboards3c44b0_config
Make
看看有没有错,有错的话按着提示来改,如果没错的话应该就能生成u-boot.bin这个文件,现在还不能用哦,因为这只是B2的一个仿制品而已(注:在我的机上到这一步可没有报错哦,你一步步按着来做的话应该也不会有什么错误吧^_^)
u-boot移植日记3(新手必读)
6)好,现在继续修改u-boot-1.1.2/include/configs/myboards3c44b0.h这个文件。
#define CONFIG_INIT_CRITICAL
找到 #define CONFIG_B2
找到 #define CONFIG_S3C44B0_CLOCK_SPEED
找到Size of malloc() pool这部分设置,改成这样吧,反正我是照着人家来做的,你自己研究下吧^_^。
#define CFG_MONITOR_LEN
#define CFG_ENV_SIZE
#define CFG_MALLOC_LEN
#define CFG_GBL_DATA_SIZE
#define CFG_ENV_IS_IN_FLASH
#define CFG_ENV_ADDR
#define CFG_ENV_OFFSET 0x40000
#define CONFIG_AUTO_COMPLETE
其它地方没有深究哦,有些好像不要也行,你就试试吧。
找到Hardware drivers部分,这应该是网络芯片设置吧,参考一下这个吧(要看芯片的):
#define CONFIG_DRIVER_RTL8019
#define RTL8019_BASE
以下部分我试过不要也行,你试下吧
#define RTL8019_BUS32
#define CONFIG_SMC_USE_16_BIT
#undef
#define CONFIG_NET_RETRY_COUNT
#define CONFIG_BAUDRATE
#define CONFIG_COMMANDS
把CFG_CMD_EEPROM改成CFG_CMD_FLASH吧,虽然不改也是可以的,具体没考究。
以下是板上env参数设置,看一下吧,其实我觉得了解一下就行的了,只是一些初始设置值,以后可以用命令setenv
#define CONFIG_BOOTDELAY
#define CONFIG_BOOTARGS
#define CONFIG_ETHADDR
#define CONFIG_NETMASK
#define CONFIG_IPADDR
#define CONFIG_SERVERIP
#define CONFIG_BOOTFILE
#define CONFIG_BOOTCOMMAND
Miscellaneous configurable options部分,参考一下吧:
#define
#define
#define
#define
#define
#define CFG_BARGSIZE
#define CFG_MEMTEST_START
#define CFG_MEMTEST_END
#undef
#define
#define
#define CFG_BAUDRATE_TABLE
Physical Memory Map部分,比较重要,修改你的sdram和flash的地址和容量。
#define CONFIG_NR_DRAM_BANKS 1
#define PHYS_SDRAM_1
#define PHYS_SDRAM_1_SIZE
#define PHYS_FLASH_1
#define PHYS_FLASH_SIZE
#define CFG_FLASH_BASE
FLASH organization部分,看注释应该知道了吧,参考一下:
#define CFG_FLASH_ERASE_TOUT
#define CFG_FLASH_WRITE_TOUT
按着来一步步的做应该不难,这里提一下vi程序的用法,其实在google一搜就找到了,不过为了方便大家,还是说一声吧,
在命令模式下:
按/ xxx再回车即可搜索到你所需要的内容(xxx),再按n搜索下一个,按shift+n搜索上一个
按:xxx即可跟到你想要的行
按:set nu显示行号
其它查书都可以找到就不说了。
做到这个时候,你可以再编译一下,看有没有错,这一步我就没有帮你们做了,不过我觉得应该不会有问题吧,下载到ram中运行,看看效果。
u-boot移植日记4(新手必读)
7)终于到了flash的设置部分了,这完全是我个人悟出来的,网上资料好像讲得不是先清楚。
#define SST_MANUFACT
#define SST_ID_xF1601
#define FLASH_SST160A
好了,相信你已经找到你的板上所用的flash对应的id号了吧?现在就来谈谈怎么改。
先进入u-boot-1.1.2/board/myboards3c44b0/common/flash.c
它里面已经帮SST160A设置好了,我的做法是把SST公司的160A都改成1601,是不是很简单,当然你也可以帮1601再写一分,但是我是个懒人,所以我就样做了^_^
到这里还有个问题没提到的,就是如果你重新用setenv saveenv 设置了参数,但是复位后会发现怎么没有保存到的(不信你试试看)。其实我是故意留到这里讲的,应该它不会报错,可以说是比较隐秘的问题,所以我故意放到这里来说,以引起你的重视。
解决方法:vi u-boot-1.1.2/board/myboard/common/flash.c
找到这个函数:write_buff
里面有这句话:#ifdef CONFIG_B2
要把B2改了,因为我们的板不叫B2,那叫什么呢?原来是在这里定义的:u-boot-1.1.2/include/configs/myboards3c44b0.h
里面有这句话:#define CONFIG_HFRK 你不喜欢HFRK这个名字也行,可以改成别的名字,只不过相应地前面的B2也要改成这个名字而已。
4.后记:
U-boot移植需要修改哪些文件?【转】
在u-boot中添加目标板支持(2410/2440) (board 目标板相关文件,主要包含SDRAM、FLASH驱动)
-
u-boot-rat/board/hugerat/rat2440/config.mk -
u-boot-rat/board/hugerat/rat2440/flash.c - u-boot-rat/board/hugerat/rat2440/lowlevel_init.S (SDRAM设置)
-
u-boot-rat/board/hugerat/rat2440/Makefile -
u-boot-rat/board/hugerat/rat2440/nand_read.c - u-boot-rat/board/hugerat/rat2440/rat2440.c
-
u-boot-rat/board/hugerat/rat2440/u-boot.lds -
u-boot-rat/common/cmd_nand.c
cpu 与处理器相关的文件
- u-boot-rat/cpu/arm920t/s3c24x0/i2c.c
- u-boot-rat/cpu/arm920t/s3c24x0/interrupts.c
- u-boot-rat/cpu/arm920t/s3c24x0/nand.c
- u-boot-rat/cpu/arm920t/s3c24x0/serial.c
- u-boot-rat/cpu/arm920t/s3c24x0/speed.c
- u-boot-rat/cpu/arm920t/s3c24x0/usb.c
- u-boot-rat/cpu/arm920t/s3c24x0/usb_ohci.c
- u-boot-rat/cpu/arm920t/start.S(时钟等设置)
driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)
- u-boot-rat/drivers/mtd/nand/nand_base.c
2008-12-17 11:44:46.000000000 +0800 - u-boot-rat/drivers/mtd/nand/nand.c
2008-12-09 15:58:42.000000000 +0800 - u-boot-rat/drivers/mtd/nand/nand_util.c
2008-12-17 12:57:42.000000000 +0800 - u-boot-rat/drivers/net/dm9000x.c
2008-12-06 20:09:04.000000000 +0800 - u-boot-rat/drivers/rtc/s3c24x0_rtc.c
2008-12-05 14:15:15.000000000 +0800 - u-boot-rat/drivers/usb/usb_ohci.c
2008-12-05 14:28:30.000000000 +0800
include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件
-
u-boot-rat/include/asm-arm/mach-types.h -
u-boot-rat/include/common.h 2008-12-05 -
u-boot-rat/include/configs/rat2410.h -
u-boot-rat/include/configs/rat2440.h -
u-boot-rat/include/linux/mtd/mtd.h -
u-boot-rat/include/s3c24x0.h
lib_xxx 处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件
-
u-boot-rat/lib_arm/board.c -
u-boot-rat/Makefile
附件: U-Boot主要目录结构
- board 目标板相关文件,主要包含SDRAM、FLASH驱动;
- common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;
- cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;
- driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)
- doc U-Boot的说明文档;
- examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;
- include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
- lib_xxx 处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;
- net 与网络功能相关的文件目录,如bootp,nfs,tftp;
- post 上电自检文件目录。尚有待于进一步完善;
- rtc RTC驱动程序;
- tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具;
分类:
第一类目录与处理器体系结构 或者开发板硬件 直接相关;
第二类目录是一些通用的函数或者驱动程序 ;
第三类目录是u-boot的应用程序、工具或者文档 。
.
|-- board 目标板相关文件,主要包含SDRAM、FLASH驱动;
|
|-- common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测; 与体系结构无关的文件,实现各种命令的C文件。
|-- cpu 与处理器相关的文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|-- disk disk驱动的分区处理代码
|-- doc
|-- drivers
|
|
|
|
|
|-- dtt 数字温度测量器或者传感器的驱动
|-- examples 一些独立运行的应用程序的例子
|-- fs 支持文件系统的文件,u-boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs。
|
|
|
|
|
|
|-- include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件 ,还有对各种硬件平台支持的会变文件,系统的配置文件和对文件系统支持的文件。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|-- lib_arm 存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数,与ARM体系结构相关的代码。
|-- lib_avr32
|-- lib_blackfin
|-- lib_generic 通用的多功能函数实现。
|-- lib_i386 存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数,与PowerPc体系结构相关的代码。
|-- lib_m68k
|-- lib_microblaze
|-- lib_mips
|-- lib_nios
|-- lib_nios2
|-- lib_ppc 存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数,与PowerPC体系结构相关的代码。
|-- modules
|-- nand_spl
|
|
|
|-- net 与网络功能相关的文件目录,如bootp,nfs,tftp; 与网络有关的代码,BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。
|-- post 上电自检文件目录。尚有待于进一步完善;
|
|-- rtc 实时时钟RTC驱动程序
`-- tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具;
|-- easylogo
|-- env
|-- gdb
|-- logos
|-- scripts
`-- updater
说明:
|- board目录下只留所配置的开发板的信息,其他板子的删除掉;
|- cpu目录下只留arm920t类型,其他的删除掉;
|- lib_*只留lib_-arm目录,其他的删除掉;
|- *_config.mk只留arm_config.mk,其余的删除掉。
|-drivers目录只保留需要的驱动,其余的删除掉,如nand Flash,网卡,lcd等。
1、删除全新的uboot源码board下的所有内容,并将EmbedSky文件夹复制至全新的uboot源码下
2、复制EmbedSky.h至include/configs/目录下
3、给include/s3c24x0.h打补丁
4、给include/nand.h打补丁
5、将modules文件夹复制至全新uboot源码根目录下
6、创建(复制)cpu/arm920t/s3c24x0目录下的nand_flash.c文件
7、给lib_arm目录下的文件打补丁
。。。。。。。。。