uboot 移植
2013-12-08 23:31
344 查看
转载:http://blog.sina.com.cn/s/blog_9340c4f901010n48.html
1.来由:
在我搞完ucos后(本来我是想学uclinux的,不过在对系统一无所知的情况下,还是先学一下ucos比较实际^_^,从中也可以对系统有个清晰的概念),我意识到要搞系统的话一个功能强大的bootloader是必不可少的,而我的板上自带的是armboot(其实我个人觉得应用在ARM上的话armboot已经足够了,毕竟u-boot也是从armboot中发展过来的,纯属个人意见),如果我的板上自带光盘有已经移植好的armboot源代码供我参考的话,我想我也不会花这么多时间去搞u-boot,可恨的是我的光盘上只有armboot.bin这个二进制文件,而没有源文件,没办法,我下定主意自己搞一个,考虑了一番后我选择了u-boot,毕竟参考资料相对比较多,再我学完u-boot后再回头看armboot,简直是一个炉里出的饼,这是后话。
2.准备:
说是容易,做起来却挺难。因为编译u-boot要在linux环境下,而不能在我们平时所熟悉的ads下那么直观。首先要建立好交叉编译环境,这个交叉编译环境可以自己来做,不过完全没必要,而且难度也挺大,一般是下载人家编译好的工具。我刚开始在这里就郁闷了很久,现在会了以后觉得原来就是这么简单,在些我把方法说清楚,希望不会再有人为这个问题郁闷了^_^:
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) Make distclean (再次强调)
2) Make B2_config(随便再个现成的试试^_^)
3) Make (没错的话应该会生成u-boot.bin文件,发生错误的话也不怕,只要细心看一下哪里错就行了,gcc碰到错误后会退出编译,所以可以一个个错误来改,一般的问题都是没找到编译器(可能你没装或者装的不对,例如人家用的是arm-linux-而你装的是arm-elf-,如果你装了的话看看你的环境变量设好了没有,前面有讲,如果不关编译器的事的话那就再看看,一般是文件的后缀不对,有些文件后缀是大写的,例如start.S但是如果你的是start.s小写的话那当然找不到(解决方法很,把它改成大写就行了)。细心看吧,不用怕,它都有注明路径,很容易可以找到的))
如果以上步骤都无误的话那么恭喜你,你的交叉编译环境可以用来编译你的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;
ULCON0 = 0x03;
UCON0 = 0x245;
UBRDIV0 = divisor;
我在这方面算术不好,所以都是参考人家的。
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 : unconfig
@./mkconfig $(@:_config=) arm s3c44b0 B2 dave
后面加上这部分:
myboards3c44b0_config : unconfig
(TAB键 )@./mkconfig $(@:_config=) arm arm920t TQ2440 NULL s3c2440(我修改了)
各项含义如下:
arm : CPU的架构(ARCH)
arm920t: CPU的类型(cpu),其对应于 cpu/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 1 这个在cpu/s3c44b0/start.S里面用到,如果你的u-boot程序不是在sdram中调试而是固化到flash中运行的话,这个必不可少。
找到 #define CONFIG_B2 1 把B2改成myboards3c44b0吧(不然就不会编译你的板了)
找到 #define CONFIG_S3C44B0_CLOCK_SPEED 75 你的44b0x应该没有75M吧
我的是改成60的
找到Size of malloc() pool这部分设置,改成这样吧,反正我是照着人家来做的,你自己研究下吧^_^。
#define CFG_MONITOR_LEN (256 * 1024)
#define CFG_ENV_SIZE (64*1024)
#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024 )
#define CFG_GBL_DATA_SIZE 128
#define CFG_ENV_IS_IN_FLASH 1 这个必不可少,如果你想把你的参数保存到flash的话(有些板是保存到EEPRAM中去的,但是s3c44b0的话还是保存到flash吧)
#define CFG_ENV_ADDR (PHYS_FLASH_1+0x40000) 这个就是你的参数保存在flash里的起始地址了
#define CFG_ENV_OFFSET 0x40000 这个我后来看它源程序发现如果你上一步没有设置它的起始地址的话就会用它来作默认地址的了
#define CONFIG_AUTO_COMPLETE
其它地方没有深究哦,有些好像不要也行,你就试试吧。
找到Hardware drivers部分,这应该是网络芯片设置吧,参考一下这个吧(要看芯片的):
#define CONFIG_DRIVER_RTL8019 这个就要看你的板上用的是什么网卡了(这个是台湾出的,有10M)
#define RTL8019_BASE 0x06000000 这个是网卡寄存器的起始地址
以下部分我试过不要也行,你试下吧
#define RTL8019_BUS32 0
#define CONFIG_SMC_USE_16_BIT
#undef CONFIG_SHOW_ACTIVITY
#define CONFIG_NET_RETRY_COUNT 10 应该是重试的次数吧
#define CONFIG_BAUDRATE 115200 设置波特率
#define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \
CFG_CMD_DATE
| \
CFG_CMD_ELF |
\
CFG_CMD_NET |
\
CFG_CMD_EEPROM |
\
CFG_CMD_I2C |
\
CFG_CMD_FAT
| \
CFG_CMD_JFFS2)
把CFG_CMD_EEPROM改成CFG_CMD_FLASH吧,虽然不改也是可以的,具体没考究。
以下是板上env参数设置,看一下吧,其实我觉得了解一下就行的了,只是一些初始设置值,以后可以用命令setenv saveenv来修改的。
#define CONFIG_BOOTDELAY 3 这个就是运行bootcmd之前的等待时间
#define CONFIG_BOOTARGS "devfs=mount root=ramfs console=ttyS0,115200" 引导uClinux的时候传递的参数,不会就先不用管它也行。
#define CONFIG_ETHADDR 00:50:c2:1e:af:fb 网卡的物理地址MAC
#define CONFIG_NETMASK 255.255.255.0 掩码地址,设置过ip的人都应该知道吧
#define CONFIG_IPADDR 192.168.0.30 这是你板上网卡8019的ip地址
#define CONFIG_SERVERIP 192.168.0.10 这是你宿主机的ip地址,以后用tftp下载的时候用到,一定要跟你的宿主机一致才行。
#define CONFIG_BOOTFILE "u-boot.bin" 这个就是你要下载文件的默认名字
#define CONFIG_BOOTCOMMAND "bootm 0x50000" 这是bootdelay后运行的命令
Miscellaneous configurable options部分,参考一下吧:
#define CFG_LONGHELP
#define CFG_PROMPT "s3c44b0=>" 这是进入命令模式下的提示符,改个帅一点的吧
#define CFG_CBSIZE 256
#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
#define CFG_MAXARGS 100
#define CFG_BARGSIZE CFG_CBSIZE
#define CFG_MEMTEST_START 0x0C400000
#define CFG_MEMTEST_END 0x0C800000
#undef CFG_CLKS_IN_HZ
#define CFG_LOAD_ADDR 0x0c008000 默认的下载地址
#define CFG_HZ 1000
#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } 可供选择的波特率
Physical Memory Map部分,比较重要,修改你的sdram和flash的地址和容量。
#define CONFIG_NR_DRAM_BANKS 1 我们只占用了一个Bank用来映射sdram
#define PHYS_SDRAM_1 0x0c000000 sdram的起始地址
#define PHYS_SDRAM_1_SIZE 0x00800000 sdram的容量(8M)
#define PHYS_FLASH_1 0x00000000 flash的起始地址
#define PHYS_FLASH_SIZE flash的容量(2M)
#define CFG_FLASH_BASE PHYS_FLASH_1 定义多个名字而已,其它地方会用到
FLASH organization部分,看注释应该知道了吧,参考一下:
#define CFG_FLASH_ERASE_TOUT 4120000
#define CFG_FLASH_WRITE_TOUT 4000
按着来一步步的做应该不难,这里提一下vi程序的用法,其实在google一搜就找到了,不过为了方便大家,还是说一声吧,
在命令模式下:
按/ xxx再回车即可搜索到你所需要的内容(xxx),再按n搜索下一个,按shift+n搜索上一个
按:xxx即可跟到你想要的行
按:set nu显示行号
其它查书都可以找到就不说了。
做到这个时候,你可以再编译一下,看有没有错,这一步我就没有帮你们做了,不过我觉得应该不会有问题吧,下载到ram中运行,看看效果。
u-boot移植日记4(新手必读)
7)终于到了flash的设置部分了,这完全是我个人悟出来的,网上资料好像讲得不是先清楚。
首先介绍一下flash的识别吧,每块flash都有一个id,前部分用来说明生产厂家,后部分用来说明它的容量,类型,位数等。它们的定义是在u-boot-1.1.2/include/flash.h中,就以我的ssts9vf1601为例:
#define SST_MANUFACT 0x00BF00BF 这是生产厂家id
#define SST_ID_xF1601 0x234B234B 这是它的型号,容量,位数等id
#define FLASH_SST160A 0x0046 这个我还说不清楚,有个要注意的问题是像sst160是不能用奇地址的,我做的过程中是把SST160A改成SST1601的,懒得帮它创一个
好了,相信你已经找到你的板上所用的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.后记:
本来是想刚做好的时候写的,但是后来发现有些功能实现不了,所以就停住了笔,等我搞好了以后,又急着去学习uClinux的移植,真的很忙,现在终于抽空把它写完。虽然有些地方还没说清楚(毕竟我对它的了解还不是很深,但我相信在我以后移植系统的过程中会逐步加深对它的了解),我还是希望它能成为最详尽的u-boot移植新手指导,对u-boot移植的初学者起到实质性的作用,这样就不枉我花了这么多的心思来写这个文档。
U-boot移植需要修改哪些文件?在网上找到高手关于u-boot移植的patch,过滤了一下,要修改到的文件可能涉及到有如下这些,先罗列出来,以后慢慢证实,下一步,应该先了解一下u-boot的目录结构才好进行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驱动;
| `-- EmbedSky
|-- common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测; 与体系结构无关的文件,实现各种命令的C文件。
|-- cpu 与处理器相关的文件
| |-- 74xx_7xx
| |-- arm1136
| |-- arm720t
| |-- arm920t
| | |-- at91rm9200
| | |-- imx
| | |-- ks8695
| | `-- s3c24x0
| |-- arm925t
| |-- arm926ejs
| | |-- omap
| | `-- versatile
| |-- arm946es
| |-- arm_intcm
| |-- at32ap
| | `-- at32ap7000
| |-- bf533
| |-- i386
| |-- ixp
| | `-- npe
| | `-- include
| |-- lh7a40x
| |-- mcf52x2
| |-- microblaze
| |-- mips
| |-- mpc5xx
| |-- mpc5xxx
| |-- mpc8220
| |-- mpc824x
| | `-- drivers
| | |-- epic
| | `-- i2c
| |-- mpc8260
| |-- mpc83xx
| |-- mpc85xx
| |-- mpc86xx
| |-- mpc8xx
| |-- nios
| |-- nios2
| |-- ppc4xx
| |-- pxa Intel的PXA处理器
| |-- s3c44b0
| `-- sa1100
|-- disk disk驱动的分区处理代码
|-- doc
|-- drivers 通用设备驱动程序,比如各种网卡、支持CFI的flash、串口和USB总线等
| |-- lcd
| |-- nand
| |-- nand_legacy
| `-- sk98lin
| `-- h
|-- dtt 数字温度测量器或者传感器的驱动
|-- examples 一些独立运行的应用程序的例子
|-- fs 支持文件系统的文件,u-boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs。
| |-- cramfs 只读的文件系统
| |-- ext2
| |-- fat 读写SD卡等外围设备时用到的文件系统
| |-- fdos
| |-- jffs2 可写的基于flash的文件系统,一般用于norflash
| `-- reiserfs
|-- include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件 ,还有对各种硬件平台支持的会变文件,系统的配置文件和对文件系统支持的文件。
| |-- asm -> asm-arm
| |-- asm-arm
| | |-- arch -> arch-s3c24x0
| | |-- arch-arm1136
| | |-- arch-arm720t
| | |-- arch-arm925t
| | |-- arch-arm926ejs
| | |-- arch-at91rm9200
| | |-- arch-imx
| | |-- arch-ixp
| | |-- arch-ks8695
| | |-- arch-omap
| | |-- arch-pxa
| | |-- arch-s3c24x0
| | |-- arch-s3c44b0
| | |-- arch-sa1100
| | |-- proc -> proc-armv
| | `-- proc-armv
| |-- asm-avr32
| | `-- arch-at32ap7000
| |-- asm-blackfin
| | `-- cpu
| |-- asm-i386
| | `-- ic
| |-- asm-m68k
| |-- asm-microblaze
| | `-- arch-microblaze
| |-- asm-mips
| |-- asm-nios
| |-- asm-nios2
| |-- asm-ppc
| |-- bedbug
| |-- configs 这个目录是很关键的目录,保存了各个开发板相关的配置信息
| |-- cramfs cramfs使用到的头文件
| |-- galileo
| |-- jffs2 jffs2文件系统使用到的头文件
| |-- linux
| | |-- byteorder
| | `-- mtd MTD设备使用到的头文件
| `-- pcmcia
|-- 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
| `-- board
| `-- amcc
| `-- sequoia
|-- net 与网络功能相关的文件目录,如bootp,nfs,tftp; 与网络有关的代码,BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。
|-- post 上电自检文件目录。尚有待于进一步完善;
| `-- cpu
|-- rtc 实时时钟RTC驱动程序
`-- tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具;
|-- bddb
|-- easylogo
|-- env
|-- gdb
|-- logos
|-- scripts
`-- updater
【20091214】
说明:
|- 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目录下的文件打补丁
。。。。。。。。。
1.来由:
在我搞完ucos后(本来我是想学uclinux的,不过在对系统一无所知的情况下,还是先学一下ucos比较实际^_^,从中也可以对系统有个清晰的概念),我意识到要搞系统的话一个功能强大的bootloader是必不可少的,而我的板上自带的是armboot(其实我个人觉得应用在ARM上的话armboot已经足够了,毕竟u-boot也是从armboot中发展过来的,纯属个人意见),如果我的板上自带光盘有已经移植好的armboot源代码供我参考的话,我想我也不会花这么多时间去搞u-boot,可恨的是我的光盘上只有armboot.bin这个二进制文件,而没有源文件,没办法,我下定主意自己搞一个,考虑了一番后我选择了u-boot,毕竟参考资料相对比较多,再我学完u-boot后再回头看armboot,简直是一个炉里出的饼,这是后话。
2.准备:
说是容易,做起来却挺难。因为编译u-boot要在linux环境下,而不能在我们平时所熟悉的ads下那么直观。首先要建立好交叉编译环境,这个交叉编译环境可以自己来做,不过完全没必要,而且难度也挺大,一般是下载人家编译好的工具。我刚开始在这里就郁闷了很久,现在会了以后觉得原来就是这么简单,在些我把方法说清楚,希望不会再有人为这个问题郁闷了^_^:
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) Make distclean (再次强调)
2) Make B2_config(随便再个现成的试试^_^)
3) Make (没错的话应该会生成u-boot.bin文件,发生错误的话也不怕,只要细心看一下哪里错就行了,gcc碰到错误后会退出编译,所以可以一个个错误来改,一般的问题都是没找到编译器(可能你没装或者装的不对,例如人家用的是arm-linux-而你装的是arm-elf-,如果你装了的话看看你的环境变量设好了没有,前面有讲,如果不关编译器的事的话那就再看看,一般是文件的后缀不对,有些文件后缀是大写的,例如start.S但是如果你的是start.s小写的话那当然找不到(解决方法很,把它改成大写就行了)。细心看吧,不用怕,它都有注明路径,很容易可以找到的))
如果以上步骤都无误的话那么恭喜你,你的交叉编译环境可以用来编译你的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;
ULCON0 = 0x03;
UCON0 = 0x245;
UBRDIV0 = divisor;
我在这方面算术不好,所以都是参考人家的。
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 : unconfig
@./mkconfig $(@:_config=) arm s3c44b0 B2 dave
后面加上这部分:
myboards3c44b0_config : unconfig
(TAB键 )@./mkconfig $(@:_config=) arm arm920t TQ2440 NULL s3c2440(我修改了)
各项含义如下:
arm : CPU的架构(ARCH)
arm920t: CPU的类型(cpu),其对应于 cpu/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 1 这个在cpu/s3c44b0/start.S里面用到,如果你的u-boot程序不是在sdram中调试而是固化到flash中运行的话,这个必不可少。
找到 #define CONFIG_B2 1 把B2改成myboards3c44b0吧(不然就不会编译你的板了)
找到 #define CONFIG_S3C44B0_CLOCK_SPEED 75 你的44b0x应该没有75M吧
我的是改成60的
找到Size of malloc() pool这部分设置,改成这样吧,反正我是照着人家来做的,你自己研究下吧^_^。
#define CFG_MONITOR_LEN (256 * 1024)
#define CFG_ENV_SIZE (64*1024)
#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024 )
#define CFG_GBL_DATA_SIZE 128
#define CFG_ENV_IS_IN_FLASH 1 这个必不可少,如果你想把你的参数保存到flash的话(有些板是保存到EEPRAM中去的,但是s3c44b0的话还是保存到flash吧)
#define CFG_ENV_ADDR (PHYS_FLASH_1+0x40000) 这个就是你的参数保存在flash里的起始地址了
#define CFG_ENV_OFFSET 0x40000 这个我后来看它源程序发现如果你上一步没有设置它的起始地址的话就会用它来作默认地址的了
#define CONFIG_AUTO_COMPLETE
其它地方没有深究哦,有些好像不要也行,你就试试吧。
找到Hardware drivers部分,这应该是网络芯片设置吧,参考一下这个吧(要看芯片的):
#define CONFIG_DRIVER_RTL8019 这个就要看你的板上用的是什么网卡了(这个是台湾出的,有10M)
#define RTL8019_BASE 0x06000000 这个是网卡寄存器的起始地址
以下部分我试过不要也行,你试下吧
#define RTL8019_BUS32 0
#define CONFIG_SMC_USE_16_BIT
#undef CONFIG_SHOW_ACTIVITY
#define CONFIG_NET_RETRY_COUNT 10 应该是重试的次数吧
#define CONFIG_BAUDRATE 115200 设置波特率
#define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \
CFG_CMD_DATE
| \
CFG_CMD_ELF |
\
CFG_CMD_NET |
\
CFG_CMD_EEPROM |
\
CFG_CMD_I2C |
\
CFG_CMD_FAT
| \
CFG_CMD_JFFS2)
把CFG_CMD_EEPROM改成CFG_CMD_FLASH吧,虽然不改也是可以的,具体没考究。
以下是板上env参数设置,看一下吧,其实我觉得了解一下就行的了,只是一些初始设置值,以后可以用命令setenv saveenv来修改的。
#define CONFIG_BOOTDELAY 3 这个就是运行bootcmd之前的等待时间
#define CONFIG_BOOTARGS "devfs=mount root=ramfs console=ttyS0,115200" 引导uClinux的时候传递的参数,不会就先不用管它也行。
#define CONFIG_ETHADDR 00:50:c2:1e:af:fb 网卡的物理地址MAC
#define CONFIG_NETMASK 255.255.255.0 掩码地址,设置过ip的人都应该知道吧
#define CONFIG_IPADDR 192.168.0.30 这是你板上网卡8019的ip地址
#define CONFIG_SERVERIP 192.168.0.10 这是你宿主机的ip地址,以后用tftp下载的时候用到,一定要跟你的宿主机一致才行。
#define CONFIG_BOOTFILE "u-boot.bin" 这个就是你要下载文件的默认名字
#define CONFIG_BOOTCOMMAND "bootm 0x50000" 这是bootdelay后运行的命令
Miscellaneous configurable options部分,参考一下吧:
#define CFG_LONGHELP
#define CFG_PROMPT "s3c44b0=>" 这是进入命令模式下的提示符,改个帅一点的吧
#define CFG_CBSIZE 256
#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
#define CFG_MAXARGS 100
#define CFG_BARGSIZE CFG_CBSIZE
#define CFG_MEMTEST_START 0x0C400000
#define CFG_MEMTEST_END 0x0C800000
#undef CFG_CLKS_IN_HZ
#define CFG_LOAD_ADDR 0x0c008000 默认的下载地址
#define CFG_HZ 1000
#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } 可供选择的波特率
Physical Memory Map部分,比较重要,修改你的sdram和flash的地址和容量。
#define CONFIG_NR_DRAM_BANKS 1 我们只占用了一个Bank用来映射sdram
#define PHYS_SDRAM_1 0x0c000000 sdram的起始地址
#define PHYS_SDRAM_1_SIZE 0x00800000 sdram的容量(8M)
#define PHYS_FLASH_1 0x00000000 flash的起始地址
#define PHYS_FLASH_SIZE flash的容量(2M)
#define CFG_FLASH_BASE PHYS_FLASH_1 定义多个名字而已,其它地方会用到
FLASH organization部分,看注释应该知道了吧,参考一下:
#define CFG_FLASH_ERASE_TOUT 4120000
#define CFG_FLASH_WRITE_TOUT 4000
按着来一步步的做应该不难,这里提一下vi程序的用法,其实在google一搜就找到了,不过为了方便大家,还是说一声吧,
在命令模式下:
按/ xxx再回车即可搜索到你所需要的内容(xxx),再按n搜索下一个,按shift+n搜索上一个
按:xxx即可跟到你想要的行
按:set nu显示行号
其它查书都可以找到就不说了。
做到这个时候,你可以再编译一下,看有没有错,这一步我就没有帮你们做了,不过我觉得应该不会有问题吧,下载到ram中运行,看看效果。
u-boot移植日记4(新手必读)
7)终于到了flash的设置部分了,这完全是我个人悟出来的,网上资料好像讲得不是先清楚。
首先介绍一下flash的识别吧,每块flash都有一个id,前部分用来说明生产厂家,后部分用来说明它的容量,类型,位数等。它们的定义是在u-boot-1.1.2/include/flash.h中,就以我的ssts9vf1601为例:
#define SST_MANUFACT 0x00BF00BF 这是生产厂家id
#define SST_ID_xF1601 0x234B234B 这是它的型号,容量,位数等id
#define FLASH_SST160A 0x0046 这个我还说不清楚,有个要注意的问题是像sst160是不能用奇地址的,我做的过程中是把SST160A改成SST1601的,懒得帮它创一个
好了,相信你已经找到你的板上所用的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.后记:
本来是想刚做好的时候写的,但是后来发现有些功能实现不了,所以就停住了笔,等我搞好了以后,又急着去学习uClinux的移植,真的很忙,现在终于抽空把它写完。虽然有些地方还没说清楚(毕竟我对它的了解还不是很深,但我相信在我以后移植系统的过程中会逐步加深对它的了解),我还是希望它能成为最详尽的u-boot移植新手指导,对u-boot移植的初学者起到实质性的作用,这样就不枉我花了这么多的心思来写这个文档。
U-boot移植需要修改哪些文件?【转】
最近关于linux移植停了好几天,看来以后得坚持才行!现在对liux移植虽然不很熟悉,但一定要坚持!加油!加油!U-boot移植需要修改哪些文件?在网上找到高手关于u-boot移植的patch,过滤了一下,要修改到的文件可能涉及到有如下这些,先罗列出来,以后慢慢证实,下一步,应该先了解一下u-boot的目录结构才好进行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驱动;
| `-- EmbedSky
|-- common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测; 与体系结构无关的文件,实现各种命令的C文件。
|-- cpu 与处理器相关的文件
| |-- 74xx_7xx
| |-- arm1136
| |-- arm720t
| |-- arm920t
| | |-- at91rm9200
| | |-- imx
| | |-- ks8695
| | `-- s3c24x0
| |-- arm925t
| |-- arm926ejs
| | |-- omap
| | `-- versatile
| |-- arm946es
| |-- arm_intcm
| |-- at32ap
| | `-- at32ap7000
| |-- bf533
| |-- i386
| |-- ixp
| | `-- npe
| | `-- include
| |-- lh7a40x
| |-- mcf52x2
| |-- microblaze
| |-- mips
| |-- mpc5xx
| |-- mpc5xxx
| |-- mpc8220
| |-- mpc824x
| | `-- drivers
| | |-- epic
| | `-- i2c
| |-- mpc8260
| |-- mpc83xx
| |-- mpc85xx
| |-- mpc86xx
| |-- mpc8xx
| |-- nios
| |-- nios2
| |-- ppc4xx
| |-- pxa Intel的PXA处理器
| |-- s3c44b0
| `-- sa1100
|-- disk disk驱动的分区处理代码
|-- doc
|-- drivers 通用设备驱动程序,比如各种网卡、支持CFI的flash、串口和USB总线等
| |-- lcd
| |-- nand
| |-- nand_legacy
| `-- sk98lin
| `-- h
|-- dtt 数字温度测量器或者传感器的驱动
|-- examples 一些独立运行的应用程序的例子
|-- fs 支持文件系统的文件,u-boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs。
| |-- cramfs 只读的文件系统
| |-- ext2
| |-- fat 读写SD卡等外围设备时用到的文件系统
| |-- fdos
| |-- jffs2 可写的基于flash的文件系统,一般用于norflash
| `-- reiserfs
|-- include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件 ,还有对各种硬件平台支持的会变文件,系统的配置文件和对文件系统支持的文件。
| |-- asm -> asm-arm
| |-- asm-arm
| | |-- arch -> arch-s3c24x0
| | |-- arch-arm1136
| | |-- arch-arm720t
| | |-- arch-arm925t
| | |-- arch-arm926ejs
| | |-- arch-at91rm9200
| | |-- arch-imx
| | |-- arch-ixp
| | |-- arch-ks8695
| | |-- arch-omap
| | |-- arch-pxa
| | |-- arch-s3c24x0
| | |-- arch-s3c44b0
| | |-- arch-sa1100
| | |-- proc -> proc-armv
| | `-- proc-armv
| |-- asm-avr32
| | `-- arch-at32ap7000
| |-- asm-blackfin
| | `-- cpu
| |-- asm-i386
| | `-- ic
| |-- asm-m68k
| |-- asm-microblaze
| | `-- arch-microblaze
| |-- asm-mips
| |-- asm-nios
| |-- asm-nios2
| |-- asm-ppc
| |-- bedbug
| |-- configs 这个目录是很关键的目录,保存了各个开发板相关的配置信息
| |-- cramfs cramfs使用到的头文件
| |-- galileo
| |-- jffs2 jffs2文件系统使用到的头文件
| |-- linux
| | |-- byteorder
| | `-- mtd MTD设备使用到的头文件
| `-- pcmcia
|-- 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
| `-- board
| `-- amcc
| `-- sequoia
|-- net 与网络功能相关的文件目录,如bootp,nfs,tftp; 与网络有关的代码,BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。
|-- post 上电自检文件目录。尚有待于进一步完善;
| `-- cpu
|-- rtc 实时时钟RTC驱动程序
`-- tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具;
|-- bddb
|-- easylogo
|-- env
|-- gdb
|-- logos
|-- scripts
`-- updater
【20091214】
说明:
|- 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目录下的文件打补丁
。。。。。。。。。
相关文章推荐
- 把jQuery的each(callback)方法移植到c#中
- IIS 服务器的备份和移植技巧
- 解析libcurl在android下的移植、编译与测试
- ok6410开发板移植DirectFB手记
- J2ME游戏移植到Android平台的方法
- J2me游戏如何快速移植到Android(1)
- J2me游戏如何快速移植到Android (2)
- android与j2me移植之clipRect
- 移植linux-2.6.30.4到S3C2440
- 触摸屏驱动移植(mini2440,linux-2.6.32.7)
- boa服务器移植
- mini2440 uboot
- 转”使用UBOOT烧写根文件系统和内核的方法
- TQ2440的学习——UBOOT移植(串口控制台的支持)
- UBOOT 2011-3版本分析(初步感受)
- UBOOT 2011-3版本分析(S3C24X0分支分析)
- U-BOOT之一:BootLoader 的概念与功能
- mkimage使用详解 (-a 和 –c参数指定的地址异同的差别)
- 向Tiny210移植Debian Linux
- U-Boot-2009-03移植笔记(移植准备)