Uboot的编译、移植-2

    xiaoxiao2021-12-14  17

    注意: 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......)

    转载请注明原文地址: https://ju.6miu.com/read-969651.html

    最新回复(0)