出来半年了,感觉学到的关于技术方面的东西很少很少,更多的是对软件大环境和行业有了更多的了解,为了巩固以前学过的知识和学习新的知识,我决定移植一个uboot到我的mini2440开发板上。
一、准备工作:包括两方面,一方面是知识储备,也即是移植uboot前必须清楚明白的一些基本原理和常识。另一方面是搭建环境。
首先 知识储备,uboot是什么?U-Boot 是bootloader的一种,是 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 停止维护。
那什么是bootloader?先来看看linux系统中软件的结构:
一般情况下嵌入式 Linux 系统中的软件主要分为以下几部分:
1) 引导加载程序:其中包括内部 ROM 中的固化启动代码和 BootLoader 两部分。内部固化 ROM 是厂家在芯片生产时候固化的,作用基本上是引导 BootLoader。有的芯片比较复杂,比如 Omap3 在 flash 中没有代码的时候有许多启动方式:USB、UART 或以太网等等。而 S3C24x0 则很简单,只有 Norboot 和 Nandboot。
2) Linux kernel 和 drivers。
3) 文件系统。包括根文件系统和建立于 Flash 内存设备之上的文件系统(EXT4、UBI、CRAMFS 等等)。它是提供管理系统的各种配置文件以及系统执行用户应用程序的良好运行环境及载体。
4) 应用程序。用户自定义的应用程序,存放于文件系统之中。
具体结构如下图:
bootloader做了什么?在 CPU 刚上电启动的时候,一般连内存控制器都没有初始化过,根本无法在内存中运行程序,更不可能处在 Linux 内核启动环境中。为了初始化CPU 及其他外设,使得 Linux内核可以在系统主存中运行,并让系统符合 Linux 内核启动的必备条件,必须要有一个先于内核运行的程序,他就是所谓的引导加载程序(bootloader)。而 BootLoader 并不是 Linux 才需要,而是几乎所有运行操作系统的设备都需要。我们的PC 的 BOIS 就是 Boot Loader 的一部分(只是前期引导,后面一般还有外存中的各种 BootLoader)。对于linux pc来说,bootloader = BIOS + GRUB/LILO。
再来说第二方面,开发环境搭建。所谓开发环境,就是指如何得到一个uboot的bin文件,并将这个bin文件烧写到开发板中。如何得到一个bin文件?从uboot官网上下载一个uboot的源码包,解压到linux环境中通过一些列移植,最终交叉编译即可。我的开发环境是ubuntu12.04,编译器是友善之臂提供的交叉编译器arm-linux-gcc-4.4.3。如何烧写到开发板中?可以使用HJTAG通过并口烧写到nandflash中。由于友善之臂提供的supervivi具有下载和烧写功能,所以一种较为简单的方法是可以通过supervivi+dnw通过usb完成该过程。具体方法可以参照友善之臂提供的手册。
上一篇:mini2440 u-boot-2009.03 移植最详细攻略
下一篇:从零开始移植U-boot到mini2440(三)——CPU初始化篇
设计资源 培训 开发板 精华推荐
- 用于医疗的 2.5V ADC 单端至差分转换
- AM1D-1212D-RZ ±12V 1 瓦 DC-DC 转换器的典型应用
- STA350BW Sound Terminal™2.1通道高效数字音频系统板
- 使用 Semtech 的 SC4436 的参考设计
- 使用 Analog Devices 的 LT1976HFE 的参考设计
- 电路显示了一个使用 LT1616 的 2.5V 输出电路
- 使用 Microchip Technology 的 MIC4606-1YML 的参考设计
- 9.9元做一个ST-Link_V2J40.M27
- AD9266-80EBZ,AD9266 评估板,单通道,16 位,80 MSPS 模数转换器
- AM2G-1209DH30Z ±9V 2 瓦 DC-DC 转换器的典型应用,适用于开/关控制应用