Uboot的编译、移植-2

本文介绍U-Boot的编译流程与移植步骤,包括工具链安装、平台配置、编译过程及源码结构分析,并详细阐述了从SMDKV210到GEC210平台的移植细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:
1、uboot(kernel)的编译不要在windows和linux的共享区(/mnt/hgfs/)做该过程。因为在uboot编译的过程中,会有些库文件或连接文件,但是这些文件在windows下会有些混乱。
2、编译的时候,尽量使用samsung提供的工具链。----arm-2009q3




---------------------------------------------------------------------------------------------------------------------------------------------------------------
编译的思路:
1、安装交叉工具链
将arm-2009q3.tar.bz2 拷贝到/usr/local/arm/下
#tar -jxvf arm-2009q3.tar.bz2
交叉工具链的目录:
/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-


注意:该工具链是没有放到ubuntu的环境变量中,使用该工具链时,必须使用绝对路径。


--------------------------------------------------------------------------------
2、uboot源码的配置
1)通过源码顶层目录下Makefile文件设置工具链。
ifeq ($(ARCH),arm)
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
注意:与工具链的安装目录保持一致




2)针对GEC210平台的配置
在Makefile中找到:
gec210_nand_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x gec210 samsung s5pc110
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/gec210/config.mk


配置方法:
在uboot源码顶层路径下:
$ make gec210_nand_config
Configuring for gec210_nand board...


---------------------------------------------------------------------------------------
3、编译 ---->u-boot.bin
在uboot源码顶层路径下:
#make


/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-objdump -d u-boot > u-boot.dis




----------------------------------------------------------------------------------------
4、查看生成uboot可执行文件
$ file u-boot
u-boot: ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped


$ size u-boot
   text   data    bss    dec    hex filename
 393531  29068 285484 708083  acdf3 u-boot




-----------------------------------------------------------------------------------------
总结:
拿到一个发布源码,如何去编译???
1、设置交叉编译工具链---Makefile


2、针对某个具体的平台进行配置  ---->Makefile


3、make ---u-boot.bin


-----------------------------------------------------------------------------------------
注意一个问题:
uboot源码包在发布之前:
#make clean
#make distclean


二者的却别
#make clean  轻度的清除,相当于make的反向操作。

#make distclean  重度的清除,相当于 make和make gec210_nand_config的反向操作

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                                               Uboot 移植

一、什么是移植?
      将别人发布的源码(针对一个特定的平台)做修改,然后让这段代码可以在我们自己的平台上运行(GEC210)


      移植的目标:GEC210(S5PV210)
      移植的源码:必须支持该CPU(S5PV210)


     移植的源码的来源:
     1、CPU的官方网站/代理商
     2、uboot官网(支持移植的CPU)


=========================================================================================================
二、将uboot移植到GEC210.   
     android_uboot_smdkv210.tar.bz2  ----> GEC210平台上
     SMDKV210  ---->samsung
     GEC210    ---->yueqian


不能这样做:
     SMDK2440(S3C2440)  --->GEC210


========================================================================================================
三、编译SMDKV210提供的uboot源码
1、安装交叉工具链
#tar -jxvf android_uboot_smdkv210.tar.bz2
通过顶层的Makefile文件设置交叉工具链。
ifeq ($(ARCH),arm)
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-


2、针对特定平台(SMDKV210)做uboot源码的配置
在Makefile中的配置入口:
smdkv210single_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/smdkc110/config.mk

通过配置入口可以得到几个信息:




$(@:_config=) --->smdkv210single


arm  ---> cpu架构
s5pc11x ---> cpu的型号, s5pc11x是s5pv210的早期版本,在做s5pv210uboot源码时,使用了s5pc11x
smdkc110 --->board的名字。smdkc110相当于smdkv210的早期版本
samsung --->vendor 厂家的名字
s5pc110 --->soc  片上系统




#make smdkv210single_config
Configuring for smdkv210single board...


3、编译  ----uboot.bin不能直接在GEC210上运行(因为没有做移植)
             在SMDKV210平台上运行
#make




========================================================================================================
四、uboot的源码结构分析
注意:
问题:uboot只是很多cpu架构、cpu的型号、板子平台;如何配置源码,使该源码支持一个具体的平台????????
答:
@$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110
类似与CPU传参,参数的名字($(@:_config=) arm s5pc11x smdkc110 samsung s5pc110)和源码目录文件的名字保持一致




1、lib_*
   支持不同的CPU架构,与GEC210相关的是:lib_arm,针对arm架构的cpu公共的代码


2、cpu
   uboot支持的cpu,与GEC210相关的是:cpu/s5pc11x/ 在该目录下有一个源文件start.S,该源文件是针对210平台的地址要执行的源文件(入口)
                                     cpu/s5pc11x/s5pc110/
3、 /board/samsung/smdkc110/
    板级初始化代码  


4、include  
   头文件,与GEC210相关的文件:include/s5pc110.h
                              include/asm-arm
 include/configs/smdkv210single.h
 
5、common 
uboot的命令,公共的代码


6、api  
uboot上设计应用程序的接口,公共的源码


7、doc
    帮助说明文档


8、fs
文件系统的源码,公共的。


9、net
uboot的一些网络工具(ping tftp..)的源码
 
10、tools
    uboot提供的一些工具,如:mkimage,公共的代码




========================================================================================================
五、uboot移植过程


分析SMDKV210与GEC210两块电子板的差异(分析原理图),针对差异做修改,完成移植


1、修改串口的控制台:将串口3改为串口1
SMDKV210: uart2  
GEC210:uart0


serial3 ----> serial1
uart2 --->uart0


--------------------------------------------------------------


2、修改内存的配置
SMDKV210 :ch0:512MB   8bits * 4 
           ch1:512MB   8bits * 4 


GEC210:  ch0:256MB  16bits*2
         ch1:256MB  16bits*2
提示:
1)GEC210平台内存的初始化是在uboot阶段完成的。内核阶段已经在内存中工作。内存的初始化非常关键
2)cotex-A8平台硬件设计是,最难的是内存的设计,尤其是在PCB阶段。why??
   CPU与内存之间是一个高速电子线路  :时钟:200MHz
                                      数据:800MHz   
所以要注意电磁兼容性设计。
注意的问题:数据线要等长
 
 
 
 
--------------------------------------------------------------
3、网卡(通过比较两块板子原理图)
SMDKV210  --->DM9000   CE:CSn4/CSn5
                       CMD:ADDR0
GEC210 --->DM9000    CE:CSn1
                     CMD:ADDR2


1)确定基地址  
s5pv210访问DM9000的基地址(由片选信号CSn1)
修改:
#define CONFIG_DM9000_BASE  0x88000000
 
2)确定地址的偏移量
s5pv210访问DM9000的地址偏移量(由地址线addr2)
CMD:  addr2=1  DATA port
      addr2=0  ADDRESS port
0b000 .... 0100 ---> 4
注意DM9000是工作在16bits模式,210访问dm9000的地址 4<<1 = 8


3)初始化srom1控制器
static void dm9000_pre_init(void)
{
unsigned int tmp;
/* DM9000 on SROM BANK1, 16 bit */
SROM_BW_REG &= ~(0xf << 4);
SROM_BW_REG |= (0x1 << 4);

//SROM1控制DM9000的时序
SROM_BC1_REG = ((0<<28)|(0<<24)|(5<<16)|(0<<12)|(0<<8)|(0<<4)|(0<<0));


//GPIO初始化
/* Set MP01_1 as SROM_CSn[1] */
tmp = MP01CON_REG;
tmp &=~(0xf<<4);
tmp |=(2<<4);
MP01CON_REG = tmp;
}
--------------------------------------------------------------
4、nor flash
SMDKV210 ---> AM29LV800BB
GEC210 --->无
将nor flash初始化的代码屏蔽掉




--------------------------------------------------------------
5、SRAM
SDMKV210 --->K6F1616U6A
GEC210 --->无
将sram初始化的代码屏蔽掉


--------------------------------------------------------------
6、PMIC---电源管理芯片
提示:什么是开关电源,什么线性电源??LM7805  --->线性电源
                                      LM2576  --->开关电源
SMDKV210 --->max8698
GEC210 --->无
将将PMIC初始化这段代码屏蔽掉。




提示:
一般uboot只要能将初始化成功硬件的核心,能启动操作系统就OK了,与启动过程相关的功能模块可以不做移植(例如:usb、声卡、ADC、jpeg、MP4......)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cool2Feel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值