u-boot制作编译过程ok
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.1.5 UBOOT的制作过程
1.第一步:修改makefile,目的告诉makefile导入的工程名是什么。
1)在/1niuedu/u-boot-1.3.4的Makefile的2494行进行COPY后进行修改,
范例如下:
将
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 复制并修改为:
edu2440_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t edu2440 NULL s3c24x0
2)交叉编译143 144修改为(很多u-boot为默认,一般不修改,如不同需要修改)
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
说明:
在顶层Makefile(u-boot文件中)中为开发板添加新的配置选项,使用已有的配置项目为例复制修改如下代码:
Smdk2410_config:unconfig(2497行)(告诉makefile导入的工程名是怎么设置的) @./mkconfig$(@:_config=)arm arm 920t smdk2410 NULL s3c24x0 Arm:CPU架构
Arm920t:CPU类型,对应cpu/arm920t目录
xyd2440:开发板型号,对应board/xyd2440
NULL:开发者
s3c2440:片上系统(SOC)
2.第二步:配置开发板选项,修改board中相应开发板选项
1)在board目录中将smdk2410复制,然后修改名字为edu2440。
2)在board/edu2440目录下将smdk2410.c修改为edu2440.c(可能运行不了,那么再做如下修改)将
E:\信盈达常用资料库\嵌入式配套资料\mini2440-20100717光盘资料\linux\bootloader\u-boot-1.1.6\board\open24x0里面的:boot_init.c,open24x0.c两个文件copy到board-edu2440文件下面。
并将open24x0.c文件修改为edu2440.c 说明:start.s需要调用这两个文件中的函数。
3)将board/edu2440目录下makefile文件里面(28行)COBJS:=smdk2410.o flash.o 修改为COBJS := edu2440.o flash.o boot_init.o(将boot_init.c编译为目标.o文件).
说明:
修改edu2440/config.mk文件:设置存储地址;最后一句TEXT_BASE = 0x33F80000是
设置UBOOT从NORFLASH放入内存的地址。
修改edu2440/boot_init.c:设置时钟频率(465行)或者在edu2440/edu2440.c中修改时钟频率。
UBOOT和LINUX不能同时存在,怎么来进行参数的传递呢,利用edu2440/edu2440.c的gd->bd->bi_boot_params = 0x30000100告诉LINUX参数存放在内存的地址,然后linux 自己要进行相应设置,然后LINUX启动时就会自动去这个地址取参数了。
U-boot.lds文件:.text (u-boot分散加载文件,把分散空间组合成统一空间,也可以把连续文件变成分散文件,根据CPU需要而定。
) :
{
cpu/arm920t/start.o (.text)
board/xyd2440/lowlevel_init.o (.text)
board/xyd2440/boot_init.o (.text)
*(.text)
}
先运行这三段代码,然后跳到主函数中;. = ALIGN(4)是4字节对齐,.rodata : { *(.rodata) }是固定段放固定数;若定义 char i=0 初始化的这个值0是放在.data : { *(.data) }中;.got : { *(.got) }是运行空间。
3.第三步:修改include/configs相应内容
1)在复制/1niuedu/u-boot-1.3.4/include/configs中将smdk2410复制后修改为edu2440。
2)然后用文本编辑器打开edu2440,将里面的网卡驱动(56-58)
#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
#define CS8900_BASE 0x19000300
#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */ 修改为:
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_USE_16BIT 1
#define CONFIG_DM9000_BASE 0x20000000
#define DM9000_IO 0x20000000
#define DM9000_DATA 0x20000004
(在E:\信盈达常用资料库\嵌入式配套资料\mini2440-20100717光盘资料\linux\bootloader\u-boot-1.1.6\include\configs的open24x0.h文件中)
或者直接屏蔽:(因为uboot不需要启动网卡)
#if 0 //为0不执行
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_USE_16BIT 1
#define CONFIG_DM9000_BASE 0x20000000
#define DM9000_IO 0x20000000
#define DM9000_DATA 0x20000004
#endif
即可。
以上三步配置完后在终端中运行:make edu2440_config(配置一下,确定编译那个工程)
然后make(默认为make all)
如果出问题就要解决问题:
常见问题:
A:提示找不到U-BOOT_xyd_VER--定义
解决方法: vi common/command.c
直接敲34然后按enter跳到:34行屏蔽(先敲i,相当于插入,然后屏蔽)
// printf ("\n%s,%s\n", version_string,U_BOOT_xyd_PATCH_VER);
先Esc 键,然后shift+: 然后输入wq退出。
如果不出问题,继续make all即可生成u-boot.bin文件。
B:如果提示:如下,表明:在/1niuedu/u-boot-1.3.4的Makefile的2494中
edu2440_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t edu2440 NULL s3c24x0 修改有误,有可能把arm920t写错了。
说明:
uboot/cpu/arm920t/start.S里关看门狗 208 ldr r0, =pWTCON
209 mov r1, #0x0
210 str r1, [r0]
4.开发板添加新的配置文件(板级设置),如果第三步编译ok不需要第四步配置。
1)添加nand flash驱动,在/1niuedu/u-boot-1.3.4/drivers/mtd/nand中修改
2)norflash驱动,在/1niuedu/u-boot-1.3.4/board/edu2440中修改
3)配置时钟,自己写。
5.编译
第三步:make all 即可编译,编译完成生成u-boot.bin
补充:main函数在uboot/common里,里面存放了很多指令,uboot运行是从CPU开始,进行初始化,调用一些模块,再到mian函数,main函数再调用其他的。
6.烧写
将u-boot.bin通过J-LINK烧写到开发板上,通过串口即可检测u-boot运行情况。
说明:因为官方提供的2410的u-boot中nor flash,nand flash的驱动是最低档的,所以一般需要根据开发板相应型号进行修改。
其它一些外部功能驱动如果没有或版本太低,不兼容,也需要自己写,所以必须自己严格按照技术文档进行编写。
将来根据个人开发产品选用的CPU型号,板级选项等,自己制作u-boot,一般需要搞2周到1个月。