uboot移植初步成功啦

发布者:Chanhero最新更新时间:2015-07-27 来源: 51hei关键字:uboot  移植 手机看文章 扫描二维码
随时随地手机看文章
 先说说移植吧,代码上的移植:只是基于代码的改动,而不包括知道代码改动的背后~~

 移植的uboot版本为1.4版,用的编译工具链为arm-elf-。不能用arm-linux编译,原因是用的c库不同。简单的说就是arm-linux是为有MMU硬件单元的处理器配置的,如ARM9器件,而arm-elf-则是用于无MMU的cpu的,如ARM7。(也试了一下,用arm-linux-编译得到的uboot.bin加载到SDRAM中运行后无显示)。arm-elf-gcc版本为2.93版本的(有点低,还需要修改cpus3c44b0config.mk,后面提到)。在uboot1.4版本中符合s3c44b0内核的板子为daveB2板,移植就是基于该板子的,当然实际板子有很多硬件情况与它不同,需要修改。

 现在就分别讲讲所要修改的文件和具体修改吧:"uboot"表示uboot的根目录

 ubootMakefile:在uboot中,默认的编译器为arm-linux-,所以首先要修改的就是把编译器改为arm-elf-:

     ifeq ($(ARCH),arm)    CROSS_COMPILE = arm-linux-    endif

 只需要把arm-linux-改为arm-elf-就行

 同时,要增加自己的板子在Makefile中的配置:

    B2_config : unconfig
         @./mkconfig $(@:_config=) arm s3c44b0 B2 dave

 该句增加了B2板子在Makefile中的配置,其中向编译器传递了四个参数:cpu体系 cpu类型 板子 公司

 可仿造该板子增加自己板子的设置,其中板子和公司可自取,为了文件,都取为44b0,增加配置如下:

    44b0_config:unconfig

        @./mkconfig $(@:_config=) arm s3c44b0 44b0 44b0

 ubootoard:该文件夹放置了所有uboot支持的板子。故要在此文件夹中增加自己的板子。移植嘛,就是在原有的基础上修改成符合自己的就行了。于是可以把dave复制成44b0放在该文件夹下。同时,把44b0所有插着B2标志的文件夹或文件都复制成44b0(这里我们就不删除daveB2吧)。然后我们修改操作就是针对44b0的,那才是我们需要的。

    ubootoard44b044b044b0.c:该文件就两个函数:board_init(),dram_init()。其中dram_init()无需修改,不过却给了我们个信号:关于SDRAM的映射起始地址和SDRAM的大小。而board_init()似乎也是不需要怎么改的。主要是配置一下IO。口但B2板子没有初始化Port c。因为我的板子上有三个LED在Port c,所以还是初始化一下吧。也许后面要用到的话还得到这里来改

 ubootincludeconfigs:我们的配置文件也还是要借用B2的,(哎,谁叫咱是兄弟呢)和前面一样,把所有标着B2的文件夹和文件都复制成44b0(不要删除了B2)。现在就修改一下44b0.h吧

    ubootincludeconfigs44b0.h:这个文件就是配置板子的各个参数。配置项还是比较多的,主要是根据板子的实际硬件情况来修改相应的数值或定义。主要修改的如下:

        #define CONFIG_B2-------->#define CONFIG_44b0

        #define CONFIG_S3C44B0_CLOCK_SPEED 75

            定义板子的系统时钟,我的板子配置成40M比较麻烦,后见分晓~~~

        #undef CONFIG_USE_IRQ

            不定义USE_IRQ堆栈。如果要在SDRAM中用到IRQ堆栈的话,这里就应该定义了

        #define CONFIG_BOOTDELAY 5------>#define CONFIG_BOOTDELAY 6

            定义UBOOT引导系统的选择延时:如果定义自动加载系统的话,超过了这个定义            的计数之后,UBOOT将自己加载系统。我把计数数改为6了,在SDRAM中调试的时候,看着显示的倒计时数为5开始时,就知道移植成功了

        #define CFG_MEMTEST_START 0x0C400000 /* memtest works on */
        #define CFG_MEMTEST_END  0x0C800000 /* 4 ... 8 MB in DRAM */

            这个都是根据B2板子来设定的,而我的板子则不是它们,而是下面的:

        #define CFG_MEMTEST_START 0x0C040000 起始值还是应该计算计算滴
        #define CFG_MEMTEST_END  0x0C100000 /这个最大什为TEXT_BASE

        #define CFG_LOAD_ADDR  0x0c700000 /* default load address */

            默认的加载系统的地址,还是改了吧,这个地址太大了,不合适啊,

        #define CFG_LOAD_ADDR  0x0c008000

        #define PHYS_SDRAM_1  0xc0000000 /* SDRAM Bank #1 */
        #define PHYS_SDRAM_1_SIZE 0x01000000 /* 16 MB */

        #define PHYS_FLASH_1  0x00000000 /* Flash Bank #1 */
        #define PHYS_FLASH_SIZE  0x00400000 /* 4 MB */

            关于SDRAM和flash的起始地址和大小的宏定义。当然,也是不符合实际情况的

        #define PHYS_SDRAM_1      0x0c000000   映射起始地址 0x0c000000
        #define PHYS_SDRAM_1_SIZE   0x00800000   大小:8M

        #define PHYS_FLASH_1  0x00000000        映射起始地址  0x00000000
        #define PHYS_FLASH_SIZE  0x00200000       大小:2M

        #define CFG_MAX_FLASH_SECT 256 /* max number of sectors on one chip */

            flash最大可选sectors 也是要改的

        #define CFG_MAX_FLASH_SECT 32

        还有就是这个B2板子没有网卡,还应该加一个网卡的配置:

        #define CONFIG_DRIVER_TRL8019

        #define RTL8019_BASE    0x08000000

        当然,还有很多其他的配置。目前为止还不知道哪些是需要的,哪些是不需要的,哪些是要        改的,哪些是不要改的,都还要在应用中才能发现哦

ubootcpus3c44b0lowlevel_init.S:关于s3c44b0存储器的配置。主要参考s3c44b0手册和SDRAM和FLASH手册,具体的已在前面的日志中说明了,在此不再罗嗦。

ubootcpus3c44b0serial.c:关于串口的——这个很重要哦,设置不好的话就看不到显示了。主要是关于串口初始化的,serial_init()调用serial_setbrg()来设置相关寄存器。这里要修改的就是依据相应的串口波特率来设置divisor。这里就能看到CONFIG_S3C44B0_CLOCK_SPEED的身影了。如果在44b0.h文件里没有定义这个宏或是这个宏的值定义不是75或66的话,那在编译的时候就会报错:#error CONFIG_S3C44B0_CLOCK_SPEED undefined。

ubootcpus3c44b0start.S:终于要说到这个文件了。其实当初觉的神秘,现在看来真是有点太把它当回事了。细看一下,和一个普通的startup.S没多大区别。主要难点还是几段代码和原理吧。关于start.S参考前面写的日志吧。这里主要讲修改的话就太简单了。要修改的寄存器初始化参数就是LOCKTIME和PLLCON。设为符合板子的值就可以了,LOCKTIME=2000,PLLCON=0x48032,设置主频Mclk=40Mhz就行了

    这里是程序代码的修改。还有一个就是前面提到的在编译的时候碰到的问题:由于arm-elf-gcc版本太低了,导致在引用编译符号的时候参数错误:ubootcpus3c44b0config.mk中有如下行:

    PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)

提示也错的参数为:abi=apcs;只要做如下改动即可消除编译器的不适:

    PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu,))

至此,关于uboot1.4移植所要做的修改就完了。但问题还远远没有完吧:uboot应该放在哪个目录?make的时候经常碰到莫名的问题~~

    还是那句话,路漫漫其修远~~~~

关键字:uboot  移植 引用地址:uboot移植初步成功啦

上一篇:uclinux编译
下一篇:uboot stage2 init_fnc_t *init_sequence[]代码分析

推荐阅读最新更新时间:2024-03-16 14:26

移植linux4.14内核到4412开发板
最近法师收到了很多留言,其中有一部分问法师什么时候更新,还有一大部分问法师我是买迅为的IMX6UL精英版好呢还是买4412精英版好呢,因为我们这俩个都不贵。法师的建议的是入手4412!为什么呢? 第一,4412是三星第一款经典处理器,为三星创造了辉煌,是当年在国内红得发紫的GalaxyS3手机的主控,他的出现,开启了手机和平板的四核时代,让手机和平板变得流畅,可以说,到目前为止,4412上用到的技术,仍是当前的主流技术,其他的处理器并没有质的飞跃,同样,经过7年以上各行各业的考验,已经非常的稳定。而且四核处理器系统可以实现动态调频调压,所以,我们一个板子不仅可以学习uboot,linux,裸机,还可学习安卓,一个板子
[单片机]
<font color='red'>移植</font>linux4.14内核到4412开发板
基于tiny4412的Linux内核移植(支持device tree)(三)
平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)) 注意 继续上文。 到目前为止,板子已经可以起来了,接下来就可以针对板子的情况移植驱动程序了。
[单片机]
Linux-4.9.2内核在mini2440上的移植(三)——编译环境测试
3.1 linux-4.9.2源码获取 为什么选择4.9.2移植呢? 因为太新的linux源码yaffs文件系统跟不上,编译过程会导致大量错误无法使用,所以选择比较新的源码就可以了。具体的说明到移植yaffs文件系统时再说。 我们的工作目录定在/root下面,进入到目录 root@ubuntu:/home/ubuntu# cd /root (1)下载linux4.9.2源码 root@ubuntu:~# wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.2.tar.gz (2)解压源码 root@ubuntu:~ # tar -zx
[单片机]
Linux-4.9.2内核在mini2440上的<font color='red'>移植</font>(三)——编译环境测试
TMS320F28x上RTOS移植关键技术研究
  TMS320F28x上RTOS移植关键技术研究    摘要 详细分析TT公司TMS320F28x系列DSP的启动过程;说明BootROM中程序的运行过程,介绍C编译器和DSP/BIOS的工作细节;探讨DSP的中断处理及从RAM中执行代码等问题。最后分析如何在TMS320F28x系列DSP上移植实时操作系统。    关键词 数字信号处理器 TMS320F28x BootRoM 实时操作系统   TMS320F28x(简称“F28x”)数字信号处理器是TI公司推出的32位定点DSP控制器,其频率高达150 MHz,大大提高了控制系统的精度和芯片的处理能力。在F28x系列DSP上移植实时操作系统,需要对编泽器、系统启动过程、中
[嵌入式]
stm32之nRF24L01无线模块(1):SPI2到SPI1的移植
本来要接着写滴答定时器的,但是趁热打铁写下SPI2到SPI1的移植。 为什么SPI2到SPI1的移植要放在nRF24L01模块里写呢,因为无线模块最重要的数据传输就是通过SPI实现的。为什么需要移植呢,因为即使是一个厂家的板子,不同型号之间它的无线模块引脚也有可能是不同的,顺便稿下移植,加深下理解。SPI2移植到SPI1呢,自己做的时候遇到了一些问题,就从遇到的问题顺便讲下初始化。 1.引脚问题 看stm32的手册,不知道为什么,无论在GPIO还是在SPI里都没有看到这个引脚的问题(初学者有可能移植的时候可能纳闷为什么是这些引脚),只有在引脚复用AFIO那里才提了一下,如下图 这样才知道SPI1的引脚,但是
[单片机]
stm32之nRF24L01无线模块(1):SPI2到SPI1的<font color='red'>移植</font>
移植Linux-5.4+内核到4412开发板
前言 ITOP-4412开发板被 Linux 官方支持,所以我们在4412上学习新的内核是非常方便的,本文作者是4412精英群8群一位技术高手,接下来,我们一起来欣赏下他的表演。 环境说明 OS版本 Ubuntu 20 LTS 交叉编译环境配置 ~$ sudo apt install gcc-arm-linux-gnueabihf ~$ sudo apt install flex ~$ sudo apt install bison ~$ sudo apt install u-boot-tools 目标开发板 CPU (Exynos4412,四核 Cortex -A9,主频为1.4GHz-1.6GHz) RAM (1GB 双通道
[单片机]
<font color='red'>移植</font>Linux-5.4+内核到4412开发板
基于STM32平台的μC/OS-II上的μC/GUI移植过程解析
μC/GUI是一种专为嵌入式应用设计的通用图形接口软件。本文详细介绍了μC/GUI的结构框架和基于STM32平台的μC/OS-II上的μC/GUI移植过程,并在此基础上进行图形界面设计;阐述了μC/GUI的窗口管理机制,提出了实现μC/GUI中文小型字库的两种方法并采用存储设备解决了图形显示的闪烁问题。 嵌入式系统的图形用户界面,要求具有占用资源少、性能高、可靠性高、可移植、可配置等特点,μC/GUI就是这样一种专门为嵌入式应用设计的图形用户界面软件。μC/GUI可应用于多任务环境中,同时使用实时操作系统与μC/GUI,既可以发挥优先级的实时性,又能实现良好的人机界面。本文使用Cortex-M3内核的STM32平台,介绍了基于
[单片机]
基于STM32平台的μC/OS-II上的μC/GUI<font color='red'>移植</font>过程解析
Android平台移植应该做两步工作
    Android系统的移植工作的目的是为了在特定的硬件上运行Android系统。在移植的过程中,把握关键要点,减少工作量是一个重要的方面。从工作的角度,通常的方法为,首先要熟悉硬件抽象层的接口,其次要集成和复用已有的驱动程序,主要的工作量在硬件抽象层的实现中。为了更好地理解和调试系统,也应该适当地了解上层对硬件抽象层的调用情况。     移植方面主要的工作有两个部分:     Linux驱动     Android系统硬件抽象层     Linux中的驱动工作在内核空间,Android系统硬件抽象层工作在用户空间,有了这两个部分的结合,就可以让庞大的Android系统运行在特定的硬件平台上。     Androi
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved