U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。
U-Boot本质是一个裸机程序,是一种普遍用于嵌入式系统中的开源的Bootloader,作用是用来引导操作系统,以及给开发人员提供测试调试工具。主要负责基本硬件初始化,导启动内核启动。
① 开放源码;
② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS;
④ 较高的可靠性和稳定性;
⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
⑦ 较为丰富的开发调试文档与强大的网络技术支持;
系统引导支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统;支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;
基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;
CRC32校验可校验FLASH中内核、RAMDISK镜像文件是否完好;
设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
上电自检功能SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号;
uboot分为启动加载模式和下载模式。启动模式即为正常工作模式,嵌入式产品发布时必须工作在启动模式,此时uboot可以完成操作系统引导,可以将操作系统从flash中拷贝到sram中运行,整个过程自动完成;下载模式即可完成系统更新,可以通过各种通讯方式将PC端数据拷贝到嵌入式产品中。
uboot多数BootLoader都分为stage1和stage2两大部分,U-boot也不例外。stage1主要存放依赖于CPU架构代码,通常是汇编程序。stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。
PC端系统:ubuntu18.04
交叉编译器:arm-linux-gcc
#解压uboot源码
[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/uboot_tiny4412-sdk1506.tar
[wbyq@wbyq uboot_tiny4412-sdk1506]$ make distclean
[wbyq@wbyq uboot_tiny4412-sdk1506]$ make clean #清空配置
[wbyq@wbyq uboot_tiny4412-sdk1506]$ make tiny4412_config #配置开发板
Configuring for tiny4412 board...
[wbyq@wbyq uboot_tiny4412-sdk1506]$ make -j8 #编译源码
报错:libz.so.1: cannot open shared object file: No such file or directory
解决办法:sudo apt-get install lib32ncurses5 sudo apt-get install lib32z1
[wbyq@wbyq uboot_tiny4412-sdk1506]$ cd sd_fuse/
[wbyq@wbyq sd_fuse]$ make //编译生成mkbl2
[wbyq@wbyq sd_fuse]$ cd tiny4412/
//插上SD卡,烧写U-boot
[xsw@xsw tiny4412]$ sudo ./sd_fusing.sh /dev/sdb
将SD卡插到开发板上,选择从SD卡启动,插上串口线。
至此,uboot烧写成功,uboot执行成功,进去uboot命令行,实现数据交互。