好文档 - 专业文书写作范文服务资料分享网站

韦东山u-boot移植笔记(DOC)

天下 分享 时间: 加入收藏 我要投稿 点赞

一:准备移植

1、从下面的官网下载最新的U-boot。用google英文版搜索最新的u-boot源码 ftp://ftp.denx.de/pub/u-boot/ 2、建立sourceinsight工程

a、解压并在E:\\colin weidongshan\\transplant_u-boot-2012.04.01\%u-boot-2012.04.01建立SI

b、添加文件到SI工程

1、点击\选中“Include top level sub-directories”和“Recursively add lower sub-directories”点击“OK”

2、选中“Board”目录,点击“Remove Tree”,去掉总个目录 进入“Board\\Samsung\\Smdk2410\\”,点击\ 3、选中“Arch”目录,点击“Remove Tree”,去掉总个目录

进入“Arch\\Arm\\Cpu\\Arm920t\\”,双击选中“Cpu.c”“Interrupts.c”“start.S”。 进入“Arch\\Arm\\Cpu\\Arm920t\\S3c24x0\\”,点击\ 进入“Arch\\Arm\\”,选中\目录,点击\ 进入“Arch\\Arm\\Include\\Asm\\Arch_s3c24x0”,点击\

进入“Arch\\Arm\\Include\\Asm\\”,点击\去掉“Include top level sub-directories”和“Recursively add lower sub-directories”前面的勾,表示只加顶层目录的文件 进入“Arch\\Arm\\Include\\Asm\\”,单击选中\点击\ 进入“Arch\\Arm\\Lib\\”,点击\

4、选中“Include”目录,点击“Remove Tree”,去掉总个目录

进入“Include\\”,点击\去掉“Include top level sub-directories”和“Recursively add lower sub-directories”前面的勾,表示只加顶层目录的文件 进入“Include\\”,单击选中\点击\ 进入“Include\\”,单击选中\点击\

进入“Include\\”,同上选中除\目录外的所有目录,点击\。\目录先不加,下面再议

进入“Include\\Configs\\”,双击选中“Smdk2410.h” 5、同步文件,完成 3、编译 尝试编译

解压: book@book-desktop:/work/system$ tar xjf u-boot-2012.04.01.tar.bz2 book@book-desktop:/work/system$ cd u-boot-2012.04.01/

配置: book@book-desktop:/work/system/u-boot-2012.04.01$ make smdk2410_config 编译: book@book-desktop:/work/system/u-boot-2012.04.01$ make

编译不成功,因为版本太老

查看版本: book@book-desktop:/work/system/u-boot-2012.04.01$ arm-linux-gcc -v 拷贝解压: book@book-desktop:/work/system/u-boot-2012.04.01$ cd /work/tools/ book@book-desktop:/work/tools$ mkdir tmp

book@book-desktop:/work/tools$ tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C tmp/ book@book-desktop:/work/tools$ cd tmp/ book@book-desktop:/work/tools/tmp$ ls usr

book@book-desktop:/work/tools/tmp$ cd usr/local/arm/4.3.2/ book@book-desktop:/work/tools/tmp/usr/local/arm/4.3.2$ ls arm-none-linux-gnueabi bin lib libexec share

book@book-desktop:/work/tools/tmp/usr/local/arm/4.3.2$ ls bin/

解压到根目录:book@book-desktop:/work/tools$ sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C /

查看环境变量: book@book-desktop:/work/tools$ echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/other_board/gcc-3.4.5-glibc-2.3.6/bin

设置环境变量:book@book-desktop:/work/tools$ export

PATH=/usr/local/arm/4.3.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

查看环境变量:book@book-desktop:/work/tools$ arm-linux-gcc -v 如果不想手动设置,你可以按如下方式修改:

book@book-desktop:/work/tools$ sudo vi /etc/environment

重新编译: book@book-desktop:/work/tools$ cd /work/system/u-boot-2012.04.01/ book@book-desktop:/work/system/u-boot-2012.04.01$ make distclean

book@book-desktop:/work/system/u-boot-2012.04.01$ make smdk2410_config Configuring for smdk2410 board...

book@book-desktop:/work/system/u-boot-2012.04.01$ make 4、下载刚编译成功的u-boot.bin,发现重新启动,串口没有任何信息 二、分析u-boot: 通过链接命令分析组成文件、阅读代码分析启动过程

重新编译,只关心最后一条链接命令:

book@book-desktop:/work/system/u-boot-2012.04.01$ rm u-boot book@book-desktop:/work/system/u-boot-2012.04.01$ make

里面有这句arm-linux-ld -pie -T u-boot.lds -Bstatic -Ttext 0x0 $UNDEF_SYM arch/arm/cpu/arm920t/start.o

book@book-desktop:/work/system/u-boot-2012.04.01$ vi u-boot.lds

通过链接脚本知道: . = 0x00000000;同时-Ttext 0x0,由此我们知道是从NOR flash开始运行,通过链接脚本还知道第一个运行的是arch/arm/cpu/arm920t/start.s 自己写bootload的总结的过程:

a. 初始化硬件:关看门狗、设置时钟、设置SDRAM、初始化NAND FLASH b. 如果bootloader比较大,要把它重定位到SDRAM c. 把内核从NAND FLASH读到SDRAM d. 设置\要传给内核的参数\e. 跳转执行内核

反汇编: book@book-desktop:/work/system/u-boot-2012.04.01$ arm-linux-objdump -D u-boot > u-boot.dis

新uboot的过程:

2.1 set the cpu to SVC32 mode 2.2 turn off the watchdog

2.3 mask all IRQs by setting all bits in the INTMR 2.4 设置时钟比例 2.5 设置内存控制器

2.6 设置栈,调用C函数board_init_f 2.7 调用函数数组init_sequence里的各个函数 2.7.1 board_early_init_f : 设置系统时钟、设置GPIO ......

2.8 重定位代码:

2.8.1 从NOR FLASH把代码复制到SDRAM

2.8.2 程序的链接地址是0,访问全局变量、静态变量、调用函数时是使\基于0地址编译得到的地址\

现在把程序复制到了SDRAM

需要修改代码,把\基于0地址编译得到的地址\改为新地址 2.8.3 程序里有些地址在链接时不能确定,要到运行前才能确定:fixabs

2.9 clear_bss

2.10 调用C函数board_init_r:第2阶段的代码

book@book-desktop:/work/system/u-boot-2012.04.01$ arm-linux-ld --help | grep pie -pie, --pic-executable Create a position independent executable

可以修改配置定义CONFIG_S3C2440

3. 修改U-BOOT代码 3.1 建一个单板(修改3个文件)

book@book-desktop:/work/system/u-boot-2012.04.01$ make distclean book@book-desktop:/work/system/u-boot-2012.04.01$ cd board/samsung/

book@book-desktop:/work/system/u-boot-2012.04.01/board/samsung$ cp smdk2410 smdk2440 -rf

book@book-desktop:/work/system/u-boot-2012.04.01/board/samsung$ cd ../.. book@book-desktop:/work/system/u-boot-2012.04.01$ cd include/configs/

book@book-desktop:/work/system/u-boot-2012.04.01/include/configs$ cp smdk2410.h smdk2440.h

看看是否能编译通过:

book@book-desktop:/work/system/u-boot-2012.04.01/include/configs$ cd ../.. book@book-desktop:/work/system/u-boot-2012.04.01$ make smdk2440_config make: *** No rule to make target `smdk2440_config'. Stop. make: *** [smdk2440_config] Error 1

编译通不过.怀疑是makefile的问题,搜索一下:

book@book-desktop:/work/system/u-boot-2012.04.01$ grep \arch/arm/include/asm/mach-types.h:1644:# define

machine_is_smdk2410() (machine_arch_type == MACH_TYPE_SMDK2410)

arch/arm/include/asm/mach-types.h:1646:# define machine_is_smdk2410() (0) board/samsung/smdk2410/Makefile:28:COBJS := smdk2410.o board/samsung/smdk2440/Makefile:28:COBJS := smdk2410.o

boards.cfg:65:smdk2410 arm arm920t - samsung s3c24x0

MAINTAINERS:750: smdk2410 ARM920T

book@book-desktop:/work/system/u-boot-2012.04.01$ vi boards.cfg 在boards.cfg文件下复制65行,修改boards.cfg: 仿照

smdk2410 arm arm920t - samsung s3c24x0 添加:

smdk2440 arm arm920t - samsung s3c24x0 然后重新配置一下

book@book-desktop:/work/system/u-boot-2012.04.01$ make smdk2440_config 然后重新编译一下

book@book-desktop:/work/system/u-boot-2012.04.01$ make 3.2 烧写看结果无法执行,下面按照第2节里面的分析启动过程 3.3 调试:

a. 阅读代码发现不足:UBOOT里先以60MHZ的时钟计算参数来设置内存控制器,但是MPLL还未设置

①处理措施: 把MPLL的设置放到start.S里,取消board_early_init_f里对MPLL的设置,如下面注释掉下面两行

//writel(0xFFFFFF, &clk_power->locktime); /* configure MPLL */

//writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV, // &clk_power->mpllcon);

编译出来的uboot非常大,可以先烧写主光盘里的u-boot.bin到nor,然后用这个uboot来烧写新的uboot

先查看一下是不是刚下的烧写结果是不是有问题

等待usb下载完: OpenJTAG> usb 1 30000000 //1表示一直等待 把flash的写保护去掉: OpenJTAG> protect off all //解除norflash写保护

韦东山u-boot移植笔记(DOC)

一:准备移植1、从下面的官网下载最新的U-boot。用google英文版搜索最新的u-boot源码ftp://ftp.denx.de/pub/u-boot/2、建立sourceinsight工程a、解压并在E:\\colinweidongshan\\transplant_u-boot-2012.04.01\%u-boot-2012.04.01建立SI
推荐度:
点击下载文档文档为doc格式
5gqt74o25l57eja0pqkz5136q5t3t4006vl
领取福利

微信扫码领取福利

微信扫码分享