主要讲述和总结了在学习嵌入式 linux 中的每个步骤。一为总结经验,二希望能作为记录在以后的学习工作中为自己的查询和巩固提供方便。
一、移植前言
基于ARM的Linux嵌入式开发一直是自己希望从事的行业,但是在实际工作中相关的项目很少,只能自己根据兴趣爱好利用业余时间进行把玩和学习,希望经过自己的努力能有所成,希望在以后能进入该行业。Liunx嵌入式开发要求具有ARM硬件原理、C/C++和Linux系统开发等等的知识,所要学习的知识比较广。好在如今网络发达,能在网上找到各位大侠前辈们的学习总结,给我的学习提供了很大的帮助,在学习的记录中有很多内容是直接引用前辈们的,感谢!闲话少说,干正事了。
二、移植环境
主 机:VMWare7--Ubuntu10.4 开发板:Mini2440--128MB Nand 编译器:arm-linux-gcc-4.3.2.tgz u-boot:u-boot-2009.08.tar.bz21. 了解 u-boot 主要的目录结构和启动流程,如下图。
U-boot主要目录说明
u-boot 的 stage1 代码通常放在 cpu/xxxx/start.S 文件中,他用汇编语言写成; u-boot 的 stage2 代码通常放在 lib_xxxx/board.c 文件中,他用 C 语言写成。 各个部分的流程图如下:
U-BOOT启动流程图
2. 建立自己的开发板项目并测试编译。 目前 u-boot 对很多 CPU 直接支持,可以查看 board 目录的一些子目录,如:board/samsung/目录下就是对三 星一些 ARM 处理器的支持,有 smdk2400、smdk2410 和 smdk6400,但没有 2440,所以我们就在这里建立自己 的开发板项目。 1)因 2440 和 2410 的资源差不多,主频和外设有点差别,所以我们就在 board/samsung/下建立自己开发板的项 目,取名叫 mini2440 #tar -jxvf u-boot-2009.08.tar.bz2 //解压源码 #cd u-boot-2009.08/board/samsung/ //进入目录 #mkdir mini2440 //创建 mini2440 文件夹 2)因 2440 和 2410 的资源差不多,所以就以 2410 项目的代码作为模板,以后再修改 #cp -rf smdk2410/* mini2440/ //将 2410 下所有的代码复制到 2440 下 #cd mini2440 //进入 mini2440 目录 #mv smdk2410.c mini2440.c //将 mini2440 下的 smdk2410.c 改名为 mini2440.c #cd http://www.cnblogs.com/../ //回到 u-boot 根目录 #cp include/configs/smdk2410.h include/configs/mini2440.h //建立 2440 头文件 #gedit board/samsung/my2440/Makefile //修改 mini2440 下 Makefile 的编译项,如下: COBJS := mini2440.o flash.o //因在 mini2440 下我们将 smdk2410.c 改名为 mini2440.c 3)修改 u-boot 跟目录下的 Makefile 文件。查找到 smdk2410_config 的地方,在他下面按照 smdk2410_config 的 格式建立 my2440_config 的编译选项,另外还要指定交叉编译器. #gedit Makefile CROSS_COMPILE ?= arm-linux- //指定交叉编译器为 arm-linux-gcc smdk2410_config : unconfig //2410 编译选项格式 @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0 mini2440_config : unconfig //2440 编译选项格式 @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x0 说明:arm : CPU 的架构(ARCH) arm920t:CPU 的类型 mini2440:对应在 board 目录下建立新的开发板项目的目录 samsung: 新开发板项目目录的上级目录,如直接在 board 下建立新的开发板项目的目录,则这里就为 NULL s3c24x0:CPU 型号 *注意:编译选项格式的第二行要用 Tab 键开始,否则编译会出错 4)测试编译新建的 my2440 开发板项目 #make distclean //清除以前编译生成的文件 #make mini2440_config //如果出现 Configuring for mini2440 board...则表示设置正确 #make //编译后在根目录下会出现 u-boot.bin 文件,则 u-boot 移植的第一步就算完成了 到此为止,u-boot 对自己的 mini2440 开发板还没有任何用处,以上的移植只是搭建了一个 mini2440 开发板 u-boot 的框架,要使其功能实现,还要根据 mini2440 开发板的具体资源情况来对 u-boot 源码进行修改。
- #tar -jxvf u-boot-2009.08.tar.bz2 //解压源码
- #cd u-boot-2009.08/board/samsung/ //进入目录
- #mkdir mini2440 //创建 mini2440 文件夹
- #cp -rf smdk2410/* mini2440/ //将 2410 下所有的代码复制到 2440 下
- #cd mini2440 //进入 mini2440 目录
- #mv smdk2410.c mini2440.c //将 mini2440 下的 smdk2410.c 改名为 mini2440.c
- #cd http://www.cnblogs.com/../ //回到 u-boot 根目录
- #cp include/configs/smdk2410.h include/configs/mini2440.h //建立 2440 头文件
- #gedit board/samsung/my2440/Makefile //修改 mini2440 下 Makefile 的编译项,如下:
- COBJS := mini2440.o flash.o //因在 mini2440 下我们将 smdk2410.c 改名为 mini2440.c
- #gedit Makefile
- CROSS_COMPILE ?= arm-linux- //指定交叉编译器为 arm-linux-gcc
- smdk2410_config : unconfig //2410 编译选项格式
- @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
- mini2440_config : unconfig //2440 编译选项格式
- @$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x0
- #make distclean //清除以前编译生成的文件
- #make mini2440_config //如果出现 Configuring for mini2440 board...则表示设置正确
- #make //编译后在根目录下会出现 u-boot.bin 文件,则 u-boot 移植的第一步就算完成了
posted on 2012-02-03 10:55 阅读( ...) 评论( ...) 收藏