开发板fl2440的u-boot制作

版权声明:转载请附带原博主的网址 https://blog.csdn.net/qq_43260665/article/details/89646884

1.bootloader简介
BootLoader 是在操作系统内核启动之前运行的一段小程序。通过这段程序,我们可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,最后从别处( Flash、以太网、 UART)载入内核映像到主存并跳到入口地址。由于 BootLoader 需要直接操作硬件,所以它严重依赖于硬件,而且依据所引导的操作系统的不同,也有不同的选择,对于嵌入式世界中更是如此。就 S3C24x0 而言,如果是引导Linux,一般选用韩国的 mizi 公司设计的 vivi 或者 DENX 软件工程中心的 Das U-boot,如果是引导 Win CE,就选用 Eboot。

所以在嵌入式世界中建立一个通用的 BootLoader 几乎是不可能的,而可能的是让一个Boot Loader 代码支持多种不同的构架和操作系统,并让她有很好的可移植性。 U-boot 就是支持多平台多操作系统的一个杰出代表。这也是 U-boot 的优势所在,因为如果在开发S3C2440 时熟悉了 U-boot,再转到别的平台的时候,就可以很快地完成这个平台下 U-boot的移植。而且 U-boot 的代码结构越来越合理,对于新功能的添加也十分容易。

U-Boot 是 Das U-Boot 的简称,其含义是 Universal Boot Loader,是遵循 GPL 条款的开放源码项目。最早德国 DENX 软件工程中心的 Wolfgang Denk 基于 8xxROM 和 FADSROM的源码创建了 PPCBoot 工程项目,此后不断添加处理器的支持。而后, Sysgo Gmbh 把PPCBoot 移植到 ARM 平台上,创建了 ARMBoot 工程项目。最终,以 PPCBoot 工程和
ARMBoot 工程为基础,创建了 U-Boot 工程, 2002 年 12 月 17 日第一个版本 U-Boot-0.2.0发布,同时 PPCBoot 和 ARMBoot 停止维护。

而今, U-Boot 作为一个主流、通用的 BootLoader,成功地被移植到包括 PowerPC、ARM、 X86 、 MIPS、 NIOS、 XScale 等主流体系结构上的百种开发板,成为功能最多、灵活性最强,并且开发最积极的开源 BootLoader。目前。 U-Boot 仍然由 DENX 的 WolfgangDenk 维护。

最早 U-boot 的版本号是由 X.Y.Z 来表示的,从 0.2.0 一直发展到 1.3.4。之后便开始使用年份加月份的表示方法,从 2008.11 到现在的 2010.3 平均每 3 个多月出一个新版本。每次代码的结构和定义都会有一些修正和改进,其代码越来越规整,功能越来越强,但是移植的难度反而越来越小,需要修改的地方越来越少。u-boot官方站点:
http://www.denx.de/wiki/U-Boot/WebHome
在这里插入图片描述
2.u-boot的编译:

zhanghang@ubuntu:~$ cd fl2440/bootloader/
zhanghang@ubuntu:~/fl2440/bootloader$ ls

下载压缩包:

zhanghang@ubuntu:~/fl2440/bootloader$ wget http://ftp.denx.de/pub/u-boot/u-boot-2010.09.tar.bz2
zhanghang@ubuntu:~/fl2440/bootloader$ tar -xjf u-boot-2010.09.tar.bz2
zhanghang@ubuntu:~/fl2440/bootloader$ cd u-boot-2010.09/
zhanghang@ubuntu:~/fl2440/bootloader/u-boot-2010.09$ ls
api         config.mk  drivers   MAINTAINERS  net          snapshot.commit
arch        COPYING    examples  MAKEALL      onenand_ipl  tools
board       CREDITS    fs        Makefile     post
boards.cfg  disk       include   mkconfig     README
common      doc        lib       nand_spl     rules.mk

编译:

zhanghang@ubuntu:~/fl2440/bootloader/u-boot-2010.09$ make fl2440_config
zhanghang@ubuntu:~/fl2440/bootloader/u-boot-2010.09$ make

make时会用到交叉编译器,交叉编译器的制作我在前几篇blog已经写过,同样要修改Makefile文件并指定交叉编译器路径:

 zhanghang@ubuntu:~/fl2440/bootloader/u-boot-2010.09$ vim Makefile 
 154 # load ARCH, BOARD, and CPU configuration
 155 include $(obj)include/config.mk
 156 export  ARCH CPU BOARD VENDOR SOC
 157 export ARCH=arm
 158 export CROSS_COMPILE=/opt/xtools/arm920t/bin/arm-arm920t-linux-gnueabi-//修改

以下是我的交叉编译器路径:

zhanghang@ubuntu:/opt/xtools/arm920t/bin$ ls
arm-arm920t-linux-gnueabi-addr2line     arm-arm920t-linux-gnueabi-gprof
arm-arm920t-linux-gnueabi-ar            arm-arm920t-linux-gnueabi-ld
arm-arm920t-linux-gnueabi-as            arm-arm920t-linux-gnueabi-ldd
arm-arm920t-linux-gnueabi-c++           arm-arm920t-linux-gnueabi-nm
arm-arm920t-linux-gnueabi-cc            arm-arm920t-linux-gnueabi-objcopy
arm-arm920t-linux-gnueabi-c++filt       arm-arm920t-linux-gnueabi-objdump
arm-arm920t-linux-gnueabi-cpp           arm-arm920t-linux-gnueabi-populate
arm-arm920t-linux-gnueabi-ct-ng.config  arm-arm920t-linux-gnueabi-ranlib
arm-arm920t-linux-gnueabi-g++           arm-arm920t-linux-gnueabi-readelf
arm-arm920t-linux-gnueabi-gcc           arm-arm920t-linux-gnueabi-size
arm-arm920t-linux-gnueabi-gcc-4.6.0     arm-arm920t-linux-gnueabi-strings
arm-arm920t-linux-gnueabi-gcov          arm-arm920t-linux-gnueabi-strip

继续编译:
如果出现undefined reference to `dm9000_initialize’ 问题。执行如下步骤可解决:

zhanghang@ubuntu:~/fl2440/bootloader/u-boot-2010.09$ make distclean  
zhanghang@ubuntu:~/fl2440/bootloader/u-boot-2010.09$ make fl2440_config
zhanghang@ubuntu:~/fl2440/bootloader/u-boot-2010.09$ make
...
spi_flash.a drivers/net/libnet.a drivers/net/phy/libphy.a drivers/pci/libpci.a drivers/pcmcia/libpcmcia.a drivers/power/libpower.a drivers/spi/libspi.a drivers/rtc/librtc.a drivers/serial/libserial.a drivers/twserial/libtws.a drivers/usb/gadget/libusb_gadget.a drivers/usb/host/libusb_host.a drivers/usb/musb/libusb_musb.a drivers/usb/phy/libusb_phy.a drivers/video/libvideo.a drivers/watchdog/libwatchdog.a common/libcommon.a lib/libfdt/libfdt.a api/libapi.a post/libpost.a board/lingyun/fl2440/libfl2440.a --end-group /home/zhanghang/fl2440/bootloader/u-boot-2010.09/arch/arm/lib/eabi_compat.o -L /opt/xtools/arm920t/lib/gcc/arm-arm920t-linux-gnueabi/4.6.0 -lgcc -Map u-boot.map -o u-boot
/opt/xtools/arm920t/bin/arm-arm920t-linux-gnueabi-objcopy -O srec u-boot u-boot.srec
/opt/xtools/arm920t/bin/arm-arm920t-linux-gnueabi-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
mv u-boot.bin u-boot-s3c2440.bin//编译完成
zhanghang@ubuntu:~/fl2440/bootloader/u-boot-2010.09$ ls
api         CREDITS   lib          onenand_ipl      u-boot
arch        disk      MAINTAINERS  post             u-boot.lds
board       doc       MAKEALL      README           u-boot.map
boards.cfg  drivers   Makefile     rules.mk         u-boot-s3c2440.bin
common      examples  mkconfig     snapshot.commit  u-boot.srec
config.mk   fs        nand_spl     System.map
COPYING     include   net          tools

接下来可以执行如下步骤:

扫描二维码关注公众号,回复: 6107436 查看本文章
zhanghang@ubuntu:~/fl2440/bootloader/u-boot-2010.09$ sudo cp tools/mkimage /usr/bin/

mkimage会在Linux内核的编译中用到,当然在编译内核时也可以apt-get install相应的文件来避免。。。

猜你喜欢

转载自blog.csdn.net/qq_43260665/article/details/89646884
今日推荐