uboot 移植
时间:2022-11-21 01:00:00
转载: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