U-Boot-1.1.6移植到MINI2440开发板(1) —— 移植前分析

发布者:chaohuangmeitao最新更新时间:2022-11-18 来源: zhihu关键字:U-Boot  移植  MINI2440开发板 手机看文章 扫描二维码
随时随地手机看文章

将U-Boot-1.1.6移植到MINI2440开发板上,从NAND Flash启动(不使用NOR Flash)。


需要准备的:


Linux环境:Ubuntu 16.04

交叉编译工具链:arm-linux-gcc-3.4.5

U-Boot-1.1.6源码:u-boot-1.1.6.tar.bz2

S3C2440手册:S3C2440A 32-BIT CMOS MICROCONTROLLER USERS MANUAL

ARM920T技术手册:ARM920T Technical Reference Manual

其它相关datasheet

参考资料:《嵌入式Linux应用开发完全手册》以及网上博客(#^.^#)。

说明:下述涉及到Linux基本操作命令的不进行详细描述。


设置交叉编译环境:


推荐直接使用已经编译好的交叉编译工具链,这里使用的是arm-linux-gcc-3.4.5,在目录下新建文件夹:


tzw@tzw-pc:~$ mkdir arm

tzw@tzw-pc:~$ cd arm/

tzw@tzw-pc:~arm$ mkdir -p toolchains/arm-linux-gcc/3.4.5

将交叉编译工具链保存在文件夹中:


tzw@tzw-pc:~/arm$ ls toolchains/arm-linux-gcc/3.4.5/

arm-linux  bin  distributed  include  info  lib  libexec  man  tmp

其中/bin目录下的可执行文件即为编译时用到的文件。


然后将交叉编译工具链的路径添加到环境变量中,添加有很多方法,这里将其保存在bash.bashrc文件中,打开并编辑bash.bashrc:


tzw@tzw-pc:~$ sudo gedit /etc/bash.bashrc

在文件最后新起一行,添加如下语句,注意不要改动文件中其他内容:


------- bash.bashrc -------

export PATH=$PATH:/home/tzw/arm/toolchains/arm-linux-gcc/3.4.5/bin

保存并关闭文件。


在Ubuntu中,打开新的终端或者在终端上输入bash打开新的shell都会读取/etc/bash.bashrc和~/.bashrc,因此采用这种方法只需要重新打开一个终端就可以使环境变量生效。也可以在旧终端中输入如下命令使环境变量生效:


tzw@tzw-pc:~$ source /etc/bash.bashrc

重新打开一个终端(快捷键:Ctrl+Alt+t),输入命令:


tzw@tzw-pc:~$ arm-linux-gcc -v

回车可以看到输出信息:


Reading specs from /home/tzw/arm/toolchains/arm-linux-gcc/3.4.5/bin/../lib/gcc/arm-linux/3.4.5/specs

...

gcc version 3.4.5

则交叉编译工具链已经设置好了,最后一行为所使用的GCC的版本,如果出现如下信息:


arm-linux-gcc: command not found

说明没有正确设置,需要检查上述步骤是否完成。




获取U-Boot源码:


从官网下载u-boot-1.1.6源码压缩包,在arm目录下新建u-boot文件夹并将源码解压到u-boot文件夹:


tzw@tzw-pc:~/arm$ mkdir u-boot

tzw@tzw-pc:~/arm$ cd u-boot

tzw@tzw-pc:~/arm/u-boot$ tar -jxvf u-boot-1.1.6.tar.bz2

查看解压的结果:


tzw@tzw-pc:~/arm/u-boot$ ls u-boot-1.1.6

arm_config.mk                  fs              MAKEALL

avr32_config.mk                i386_config.mk  Makefile

blackfin_config.mk             include         microblaze_config.mk

board                          lib_arm         mips_config.mk

CHANGELOG                      lib_avr32       mkconfig

CHANGELOG-before-U-Boot-1.1.5  lib_blackfin    nand_spl

common                         lib_generic     net

config.mk                      lib_i386        nios2_config.mk

COPYING                        lib_m68k        nios_config.mk

cpu                            lib_microblaze  post

CREDITS                        lib_mips        ppc_config.mk

disk                           lib_nios        README

doc                            lib_nios2       rtc

drivers                        lib_ppc         rules.mk

dtt                            m68k_config.mk  tools

examples                       MAINTAINERS

可以看到/arm/u-boot/u-boot-1.1.6目录下的U-Boot源码。




初次编译U-Boot-1.1.6:


不直接在源码上修改,将源码复制一份进行修改:


tzw@tzw-pc:~/arm/u-boot$ mkdir u-boot-mini2440-1.1.6

tzw@tzw-pc:~/arm/u-boot$ cp -r u-boot-1.1.6/* u-boot-mini2440-1.1.6/

查看复制的结果:


tzw@tzw-pc:~/arm/u-boot$ cd u-boot-mini2440-1.1.6/

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ ls

arm_config.mk                  fs              MAKEALL

avr32_config.mk                i386_config.mk  Makefile

blackfin_config.mk             include         microblaze_config.mk

board                          lib_arm         mips_config.mk

CHANGELOG                      lib_avr32       mkconfig

CHANGELOG-before-U-Boot-1.1.5  lib_blackfin    nand_spl

common                         lib_generic     net

config.mk                      lib_i386        nios2_config.mk

COPYING                        lib_m68k        nios_config.mk

cpu                            lib_microblaze  post

CREDITS                        lib_mips        ppc_config.mk

disk                           lib_nios        README

doc                            lib_nios2       rtc

drivers                        lib_ppc         rules.mk

dtt                            m68k_config.mk  tools

examples                       MAINTAINERS

mini2440开发板使用Samsung的S3C2440芯片,与U-Boot-1.1.6中已有的smdk2410开发板(采用Samsung S3C2410芯片)相似,因此在smdk2410的基础上进行移植。


首先测试一下源码是否能正常编译:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ make distclean

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ make smdk2410_config

tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ make

make distclean:完全清除所有配置以及生成的文件。

make clean:清除所有生成的文件,会保留配置。

make smdk2410_config:进行smdk2410开发板的配置。

make:根据Makefile生成二进制文件u-boot.bin。

等待一段时间,可以在/u-boot-mini2440-1.1.6目录下看到生成的二进制文件:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ ls u-boot.bin

u-boot.bin

如果开发板是smdk2410的话,那么将这个二进制文件烧写进开发板,就可以在串口上看到U-Boot的运行输出信息了。


如果make执行过程中出现错误的话,一般是一些依赖的库没有安装,根据报错信息依次安装所需要的库进行了,直到最后生成u-boot.bin这个二进制文件。




移植前的分析:


由上述可知,U-Boot的编译首先需要配置,然后才进行编译:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ make smdk2410_config --just-print

make smdk2410_config --just-print:仅输出将要执行的语句,但并不执行。

输出信息:


tzw@tzw-pc:~/arm/u-boot/u-boot-mini2440-1.1.6$ make smdk2410_config --just-print

rm -f include/config.h include/config.mk

    board/*/config.tmp board/*/*/config.tmp

/home/tzw/arm/u-boot/u-boot-mini2440-1.1.6/mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0

可知首先删除了原先的一些配置相关的文件:


include/config.h

include/config.mk

board/*/config.tmp

board/*/*/config.tmp

即/include目录下的config.h、config.mk,/board目录下所有与配置相关的config.tmp文件。


然后执行:


mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0

mkconfig是/u-boot-mini2440-1.1.6目录下的一个文件,后面是输入的6个参数:


mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0

$0       $1       $2  $3      $4       $5   $6

$0表示所执行的程序的名称;

$1~$6为所执行的程序的输入参数。

从Makefile中可知:


------- Makefile -------

92 MKCONFIG    := $(SRCTREE)/mkconfig

93 export MKCONFIG

...

1879 smdk2410_config    :    unconfig

1880     @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

打开顶层mkconfig文件,进行分析:


默认创建新的配置文件,并将板子的名称置为"":


------- mkconfig -------

11 APPEND=no    # Default: Create new config file

12 BOARD_NAME=""    # Name to print in make output

判断传入的参数是否含有特殊项,并进行处理,这里并无特殊项:


------- mkconfig -------

14 while [ $# -gt 0 ] ; do

15     case "$1" in

16     --) shift ; break ;;

17     -a) shift ; APPEND=yes ;;

18     -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;

19     *)  break ;;

20     esac

21 done

$# 所执行的程序的参数的个数;

-gt 大于(greater than);

-eq 等于(equal);

-ne 不等于(not equal);

-ge 大于等于(greater and equal);

-lt 小于(less than);

-le小于等于(less and equal)。

第23行判断开发板名称是否存在,并将其赋值为第一个参数,即BOARD_NAME=smdk2410:


------- mkconfig -------

23 [ "${BOARD_NAME}" ] || BOARD_NAME="$1"

第25、26行对参数个数进行判断,不满足要求则退出:


------- mkconfig -------

25 [ $# -lt 4 ] && exit 1

26 [ $# -gt 6 ] && exit 1

输出配置信息:Configuring for smdk2410 board...


------- mkconfig -------

28 echo "Configuring for ${BOARD_NAME} board..."

第33行到62行新建链接文件:


------- mkconfig -------

33 if [ "$SRCTREE" != "$OBJTREE" ] ; then

34     mkdir -p ${OBJTREE}/include

35     mkdir -p ${OBJTREE}/include2

36     cd ${OBJTREE}/include2

37     rm -f asm

38     ln -s ${SRCTREE}/include/asm-$2 asm

39     LNPREFIX="../../include2/asm/"

40     cd ../include

41     rm -rf asm-$2

42     rm -f asm

43     mkdir asm-$2

44     ln -s asm-$2 asm

45 else

46     cd ./include

47     rm -f asm

48     ln -s asm-$2 asm

49 fi

50 

51 rm -f asm-$2/arch

52 

53 if [ -z "$6" -o "$6" = "NULL" ] ; then

54     ln -s ${LNPREFIX}arch-$3 asm-$2/arch

55 else

56     ln -s ${LNPREFIX}arch-$6 asm-$2/arch

57 fi

58 

59 if [ "$2" = "arm" ] ; then

60     rm -f asm-$2/proc

61     ln -s ${LNPREFIX}proc-armv asm-$2/proc

62 fi

第一个if判断执行45行else分支,进入/include目录,建立链接文件/asm指向/asm-arm。

[1] [2]
关键字:U-Boot  移植  MINI2440开发板 引用地址:U-Boot-1.1.6移植到MINI2440开发板(1) —— 移植前分析

上一篇:U-Boot-1.1.6移植到MINI2440开发板(3) —— 源码分析第一阶段
下一篇:详解ARM处理寄存器与用户模式

推荐阅读最新更新时间:2024-11-05 11:20

uC/OS-II在ARM系统上的移植与实现
0  引言     在开发嵌入式系统时,一般选择基于ARM 和uC/ OS - II 的嵌入式开发平台,因为ARM 微处理器具有处理速度快、超低功耗、价格低廉、应用前景广泛等优点 . 将uC/ OS - II 移植到ARM 系统之后,可以充分结合两者的优势. 如果一个程序在一个环境里能工作,我们经常希望能将它移植到另一个编译系统、处理器或者操作系统上,这就是移植技术.移植技术可以使一种特定的技术在更加广泛的范围使用,使软件使用更加灵活,不局限于某一条件.uC/OS - II 是由Jean J . Labrosse 先生编写的完整的可移植、固化、裁剪的占先式实时多任务内核.uC/ OS - II 的源代码完全开放,这是其他商业实
[嵌入式]
TQ2440移植u-boot-2010.06-rc1---1调试的思路
硬件: 开发板: TQ2440 仿真器: openJtag 软件: 系统: XP + vmware虚拟ubuntu_10.10 编译: ubuntu_10.10下/opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin/ 调试环境: XP + eclipse + OpenOCD_GUI u-boot版本: u-boot-2010.06-rc1 一. 调试环境 用openjtag调试与烧到nand_flash中运行基本相同,就是有两点不一样: 一是跳过了memory初始化过程 二是跳过了从flash中读取数据到内存
[单片机]
Linux-2.6.14内核在S3C2410上的移植
2.4内核由于本身并不支持2410,移植起来较为烦琐,所以直接上2.6的版本. 1.准备工作 下载解压交叉编译工具,2.6的内核编译要用3.4.1版本的(arm-linux-gcc-3.4.1)ftp://ftp.handhelds.org/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2 下载解压2.6.14.1内核 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ . 之前文章已经说明不再赘述. 2.Flash分区管理 启动开发板,进入vivi,查看vivi的分区信息. 分区信息如下所示: 分区 起始地址 分区大小
[单片机]
U-Boot 在44B0X 开发板上的移植以及代码分析
1. u-boot 介绍 u-boot 是一个open source 的bootloader,目前版本是1.1.2。u-boot 是在ppcboot 以及armboot 的基础上发展而来,相当的成熟和稳定,已经在许多嵌入式系统开发过程中被采用。由于其开发源代码,其支持的开发板众多。 为什么我们需要u-boot?显然可以将uClinux 直接烧入flash,从而不需要额外的引导装载程序(bootloader)。但是从软件升级的角度以及程序修补的来说,软件的自动更新非常重要。事实上,引导装载程序(bootloader)的用途不仅如此,但仅从软件的自动更新的需要就说明我们的开发是必要的。同时,u-boot 移植的过程也是一
[单片机]
SmartARM2200开发板的RedBoot的移植
引 言 eCos(embedded Configurable operating system)最初是由Cygnus Solutions公司为面向嵌入式领域而开发的实时操作系统,源码公开,具有很强的可移植性和可配置性,适合于嵌入式开发。现在eCos主要由 eCosCentric公司和eCos开源社区共同开发维护。eCos的特性,特别是它的可配置性,能有效缩短嵌入式产品的开发周期并降低成本。 RedBoot(Red Hat Embedded Debug and Bootstrap)是一个由Red Hat公司开发的可以在嵌入式系统上独立运行的引导程序。它是目前嵌入式领域功能最强大、可移植性最好的BootLoader之一,采用e
[单片机]
SmartARM2200<font color='red'>开发板</font>的RedBoot的<font color='red'>移植</font>
Micro2440 Nboot ADS 移植到Keil5编译通过
由于项目需要开发老版本S3C2440,由于时间有限系统当然跑WinCE6.0,软件兼容性好 当然安装开发工具等等一大堆是相当头疼,之前做STM32特别多,个人电脑一大堆都是32的BSP包,keil用的特别顺手,这次开发2440需要用到友善提供的Nboot,由于ADS软件兼容行特差问题太多不想折腾了,将Nboot移植到keil5上, 步骤1: 需要下载keil下ARM9的支持包,给上逻辑 http://www2.keil.com/mdk5/legacy,下载Legacy support for Arm7, Arm9 & Cortex-R devices安装即可。 步骤2: 将所有Nboot文件拷贝到keil工程下,如
[单片机]
Micro2440 Nboot ADS <font color='red'>移植</font>到Keil5编译通过
基于TMS320DM3730的H.264编码器移植与优化方法研究
H.264/AVC是ISO/IEC和ITU-T联合推出的新一代的视频编码标准。其具有高压缩率、高图像质量、良好的网络亲和性等优点,被广泛的应用于各个视频相关产业中。在相同的图像质量的前提下,和传统的视频标准MPEG-4相比,H.264的码率只有MPEG-4的1/3。但是,H.2 64算法非常复杂,要实现实时编码是比较困难的。因此,如何将H.264编码器进行移植和优化,使其用于实际产品中成为了研究的热点。 DSP芯片技术的快速发展为实现嵌入式多媒体技术提供了可能。TMS320DM3730(简称DM3730)作为TI公司2010年推出的高性能芯片,以其ARM+DSP结构体系、运算速度快、众多多媒体接口等优点成为进行嵌入式系统开发
[单片机]
基于TMS320DM3730的H.264编码器<font color='red'>移植</font>与优化方法研究
u-boot顶层目录config.mk分析
1. 设置obj与src ifneq ($(OBJTREE),$(SRCTREE)) ifeq ($(CURDIR),$(SRCTREE)) dir := else dir := $(subst $(SRCTREE)/,,$(CURDIR)) endif obj := $(if $(dir),$(OBJTREE)/$(dir)/,$(OBJTREE)/) src := $(if $(dir),$(SRCTREE)/$(dir)/,$(SRCTREE)/) $(shell mkdir -p $(obj)) else obj := src := endif 一般目标输出到源代码目录下,因此执行完上面的代码后,src和o
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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