-
LINUX系统移植及UBOOT代码分析.zip下载
资源介绍
Linux系统移植
目 录
第一部分 前言....................................................................................................................................8
1 硬件环境......................................................................................................................................8
1.1 主机硬件环境.......................................................................................................................8
1.2 目标板硬件环境...................................................................................................................8
1.3 工具介绍...............................................................................................................................8
2 软件环境.......................................................................................................................................8
2.1 主机软件环境.......................................................................................................................8
2.1.1 Windows 操作系统.......................................................................................................8
2.1.2 Linux 操作系统 .......................................................................................................8
2.1.3 目标板最后运行的环境...............................................................................................9
2.2 Linux 下工作用户及环境....................................................................................................9
2.2.1 交叉工具的安装...........................................................................................................9
2.2.2 uboot移植工作目录....................................................................................................9
2.2.3 内核及应用程序移植工作...........................................................................................9
2.3 配置系统服务.....................................................................................................................10
2.3.1 tftp 服务器的配置.......................................................................................................10
2.4 工具使用.............................................................................................................................12
2.4.1 minicom的使用..........................................................................................................12
3 作者介绍....................................................................................................................................13
3.1 策划, 组织, 指导, 发布者...................................................................................................13
3.2 ADS bootloader部分..........................................................................................................13
3.3 交叉工具部分.....................................................................................................................13
3.4 uboot 部分...........................................................................................................................13
3.5 内核部分.............................................................................................................................13
3.6 应用程序部分.....................................................................................................................13
3.7 网卡驱动部分.....................................................................................................................13
3.8 Nand Flash 驱动部分.........................................................................................................13
第二部分 系统启动bootloader 的编写(ADS).................................................................................14
1 工具介绍....................................................................................................................................14
1.1 ADS 命令行命令介绍........................................................................................................14
1.1.1 armasm........................................................................................................................14
1.1.2 armcc, armcpp.............................................................................................................14
1.1.3 armlink.........................................................................................................................14
2 基本原理....................................................................................................................................15
2.1 可执行文件组成及内存映射.............................................................................................15
2.1.1 可执行文件的组成.....................................................................................................15
2.1.2 装载过程.....................................................................................................................16
2.1.3 启动过程的汇编部分.................................................................................................17
2.1.4 启动过程的 C部分.....................................................................................................17
3 AXD的使用以及源代码说明...................................................................................................18
3.1 源代码说明.........................................................................................................................18
3.1.1 汇编源代码说明.........................................................................................................18
3.1.2 C语言源代码说明......................................................................................................23
3.1.3 源代码下载.................................................................................................................23
3.2 AXD的使用.......................................................................................................................23
3.2.1 配置仿真器.................................................................................................................23
3.2.2 启动 AXD 配置开发板...............................................................................................23
第三部分 GNU交叉工具链.............................................................................................................25
1 设置环境变量,准备源码及相关补丁...................................................................................25
1.1 设置环境变量.....................................................................................................................25
1. 2 准备源码包............................................................................................................................25
1.2.1 binuils..........................................................................................................................25
1.2.2 gcc...............................................................................................................................25
1.2.3 glibc.............................................................................................................................25
1.2.4 linux kernel..................................................................................................................26
1.3 准备补丁.............................................................................................................................26
1.3.1 ioperm.c.diff................................................................................................................26
1.3.2 flow.c.diff....................................................................................................................26
1.3.3 tlinux.diff....................................................................................................................26
1.4 编译 GNU binutils...........................................................................................................26
1.5 准备内核头文件.................................................................................................................26
1.5.1 使用当前平台的 gcc编译内核头文件......................................................................26
1.5.2 复制内核头文件.........................................................................................................27
1.6 译编glibc头文件.............................................................................................................27
1.7 编译gcc第一阶段............................................................................................................27
1.8 编译完整的glibc..............................................................................................................27
1.9 编译完整的gcc.................................................................................................................28
2 GNU 交叉工具链的下载...........................................................................................................28
2.1 ARM 官方网站...................................................................................................................28
2.2 本文档提供的下载.............................................................................................................28
3 GNU 交叉工具链的介绍与使用...............................................................................................29
3.1 常用工具介绍.....................................................................................................................29
3.2.1 armlinuxgcc的使用.................................................................................................29
3.2.2 armlinuxar 和 armlinuxranlib 的使用..................................................................30
3.2.3 armlinuxobjdump 的使用.........................................................................................30
3.2.4 armlinuxreadelf 的使用............................................................................................31
3.2.6 armlinuxcopydump 的使用......................................................................................32
4 ARM GNU 常用汇编语言介绍.................................................................................................32
4.1 ARM GNU常用汇编伪指令介绍.....................................................................................32
4.2 ARM GNU专有符号.........................................................................................................33
4.3 操作码.................................................................................................................................33
5 可执行生成说明........................................................................................................................33
5.1 lds文件说明.......................................................................................................................33
5.1.1 主要符号说明.............................................................................................................33
5.1.2 段定义说明.................................................................................................................34
第四部分 uboot 的移植...................................................................................................................35
1 uboot的介绍及系统结构.........................................................................................................35
1.1 uboot 介绍.........................................................................................................................35
1.2 获取uboot.........................................................................................................................35
1.3 uboot 体系结构.................................................................................................................35
1.3.1 uboot目录结构..........................................................................................................35
2 uboot的启动过程及工作原理...................................................................................................36
2.1 启动模式介绍.....................................................................................................................36
2.2 阶段1 介绍.........................................................................................................................36
2.2.1 定义入口.....................................................................................................................36
2.2.2 设置异常向量.............................................................................................................37
2.2.3 设置 CPU的模式为SVC模式..................................................................................37
2.2.4 关闭看门狗.................................................................................................................37
2.2.5 禁掉所有中断.............................................................................................................37
2.2.6 设置以 CPU的频率....................................................................................................37
2.2.7 设置 CP15...................................................................................................................37
2.2.8 配置内存区控制寄存器.............................................................................................38
2.2.9 安装 UBOOT 使的栈空间........................................................................................38
2.2.10 BSS 段清 0................................................................................................................38
2.2.11 搬移 Nand Flash 代码...............................................................................................39
2.2.12 进入 C代码部分.......................................................................................................39
2.3 阶段2 的C语言代码部分 .............................................................................................39
2.3.1 调用一系列的初始化函数.........................................................................................39
2.3.2 初始化网络设备.........................................................................................................41
2.3.3 进入主 UBOOT 命令行..............................................................................................41
2.4 代码搬运.............................................................................................................................41
3 uboot的移植过程.......................................................................................................................42
3.1 环境.....................................................................................................................................42
3.2 步骤.....................................................................................................................................42
3.2.1 修改 Makefile..............................................................................................................42
3.2.2 在 board 子目录中建立 crane2410.............................................................................42
3.2.3 在 include/configs/中建立配置头文件......................................................................42
3.2.4 指定交叉编译工具的路径.........................................................................................42
3.2.5 测试编译能否成功.....................................................................................................42
3.2.6 修改 lowlevel_init.S 文件...........................................................................................43
3.2.9 UBOOT 的 Nand Flash 移植......................................................................................45
3.2.8 重新编译uboot..........................................................................................................45
3.2.9 把 uboot烧入flash....................................................................................................45
4 UBOOT 命令的使用................................................................................................................46
4.1 UBOOT命令的介绍.........................................................................................................46
4.1.1 获得帮助信息.............................................................................................................46
4.2 常用命令使用说明.............................................................................................................47
4.2.1 askenv(F).....................................................................................................................47
4.2.2 autoscr.........................................................................................................................47
4.2.3 base ...........................................................................................................................47
4.2.4 bdinfo...........................................................................................................................47
4.2.5 bootp............................................................................................................................47
4.2.8 tftp(tftpboot)................................................................................................................48
4.2.9 bootm...........................................................................................................................48
4.2.10 go...............................................................................................................................48
4.2.11 cmp .........................................................................................................................48
4.2.12 coninfo .....................................................................................................................48
4.2.13 cp...............................................................................................................................48
4.2.14 date............................................................................................................................49
4.2.15 erase(F)......................................................................................................................49
4.2.16 flinfo(F).....................................................................................................................49
4.2.17 iminfo........................................................................................................................49
4.2.18 loadb..........................................................................................................................49
4.2.19 md..............................................................................................................................49
4.2.20 mm ............................................................................................................................50
4.2.21 mtest .......................................................................................................................50
4.2.22 mw.............................................................................................................................50
4.2.23 nm ...........................................................................................................................50
4.2.24 printenv......................................................................................................................50
4.2.25 ping ..........................................................................................................................51
4.2.26 reset...........................................................................................................................51
4.2.27 run ...........................................................................................................................51
4.2.28 saveenv(F).................................................................................................................51
4.2.29 setenv.........................................................................................................................51
4.2.30 sleep...........................................................................................................................51
4.2.31 version.......................................................................................................................51
4.2.32 nand info....................................................................................................................51
4.2.33 nand device ........................................................................................................51
4.2.34 nand bad....................................................................................................................51
4.2.35 nand read...................................................................................................................52
4.2.36 nand erease................................................................................................................52
4.2.37 nand write..................................................................................................................52
4.3 命令简写说明.....................................................................................................................52
4.4 把文件写入NandFlash.......................................................................................................53
4.5 下载提供.............................................................................................................................53
5 参考资料....................................................................................................................................53
第五部分 linux 2.6 内核的移植.......................................................................................................53
1 内核移植过程............................................................................................................................53
1.1 下载linux 内核...................................................................................................................53
1.2 修改Makefile.....................................................................................................................53
1.3 设置flash 分区...................................................................................................................54
1.3.1 指明分区信息.............................................................................................................54
1.3.2 指定启动时初始化.....................................................................................................56
1.3.3 禁止 Flash ECC校验 ................................................................................................56
1.4 配置内核.............................................................................................................................56
1.4.1 支持启动时挂载 devfs................................................................................................56
1.4.2 配置内核产生.config 文件.........................................................................................57
1.4.3 编译内核.....................................................................................................................58
1.4.4 下载 zImage到开发板................................................................................................58
2 创建 uImage................................................................................................................................61
2.1 相关技术背景介绍.............................................................................................................61
2.2 在内核中创建uImage 的方法...........................................................................................61
2.2.1 获取 mkimage工具.....................................................................................................61
2.2.2 修改内核的 Makefile文件.........................................................................................61
3 追加实验记录.............................................................................................................................62
3.1 移植 linux2.6.15.7..............................................................................................................62
3.2 移植 linux2.6.16.21............................................................................................................62
3.3 移植linux2.6.17................................................................................................................62
4 参考资料....................................................................................................................................62
第六部分 应用程序的移植..............................................................................................................63
1 构造目标板的根目录及文件系统.............................................................................................63
1.1 建立一个目标板的空根目录.............................................................................................63
1.2 在 my_rootfs 中建立Linux 目录树...................................................................................63
1.3 创建linuxrc文件................................................................................................................63
2 移植 Busybox.............................................................................................................................64
2.1 下载busybox......................................................................................................................64
2.3 编译并安装Busybox..........................................................................................................65
3 移植 TinyLogin...........................................................................................................................66
3.1 下载.....................................................................................................................................66
3.2 修改tinyLogin 的 Makefile................................................................................................66
3.3 编译并安装.........................................................................................................................66
4 相关配置文件的创建................................................................................................................66
4.1 创建帐号及密码文件.........................................................................................................66
4.2 创建profile文件................................................................................................................67
4.4 创建fstab 文件...................................................................................................................67
4.5 创建inetd.conf 配置文件...................................................................................................67
5 移植 inetd....................................................................................................................................67
5.1 inetd 的选择及获取............................................................................................................67
5.1.1 获取 inetd....................................................................................................................67
5.2 编译inetd............................................................................................................................67
5.2.1 修改 configure文件....................................................................................................67
5.2.2 编译 ...........................................................................................................................68
5.3 配置inetd............................................................................................................................68
5.3.1 拷贝 inetd 到根文件系统的usr/sbin 目录中.............................................................68
6 移植 thttpd Web 服务器.............................................................................................................69
6.1 下载.....................................................................................................................................69
6.2 编译thttpd...........................................................................................................................69
6.3 配置.....................................................................................................................................69
6.3.1 拷贝 thttpd 二进制可执行文件到根文件系统/usr/sbin/目录中...............................69
6.3.2 修改 thttpd 配置文件..................................................................................................69
6.3.3 转移到根文件系统目录,创建相应的文件.............................................................69
7 建立根目录文件系统包............................................................................................................70
7.1 建立CRAMFS 包...............................................................................................................70
7.1.1 下载 cramfs 工具........................................................................................................70
7.1.2 制作 cramfs 包............................................................................................................70
7.1.3 写 cramfs 包到Nand Flash.........................................................................................70
8 参考资料....................................................................................................................................70
第七部分 Nand flash 驱动的编写与移植........................................................................................71
1 Nand flash 工作原理..................................................................................................................71
1.1 Nand flash 芯片工作原理..................................................................................................71
1.1.1 芯片内部存储布局及存储操作特点.........................................................................71
1.1.2 重要芯片引脚功能.....................................................................................................71
1.1.3 寻址方式.....................................................................................................................71
1.1.4 Nand flash 主要内设命令详细介绍...........................................................................72
1.2 Nand Flash 控制器工作原理.............................................................................................72
1.2.1 Nand Flash 控制器特性..............................................................................................72
1.2.2 Nand Flash 控制器工作原理......................................................................................72
1.3 Nand flash 控制器中特殊功能寄存器详细介绍 ............................................................72
1.4 Nand Flash 控制器中的硬件ECC介绍............................................................................73
1.4.1 ECC产生方法............................................................................................................73
1.4.2 ECC生成器工作过程................................................................................................74
1.4.3 ECC的运用................................................................................................................74
2 在 ADS下flash 烧写程序.........................................................................................................74
2.1 ADS 下 flash 烧写程序原理及结构...................................................................................74
2.2 第三层实现说明.................................................................................................................74
2.1.1 特殊功能寄存器定义.................................................................................................74
2.1.2 操作的函数实现.........................................................................................................74
2.3 第二层实现说明.................................................................................................................75
2.3.1 Nand Flash 初始化......................................................................................................75
2.3.3 获取 Nand flash ID......................................................................................................75
2.3.4 Nand flash 写入...........................................................................................................76
2.3.5 Nand flash 读取...........................................................................................................77
2.3.6 Nand flash 标记坏块...................................................................................................78
2.3.7 Nand Flash 检查坏块..................................................................................................79
2.3.8 擦除指定块中数据.....................................................................................................79
2.4 第一层的实现....................................................................................................................80
3 在 UBOOT 对Nand Flash 的支持............................................................................................82
3.1 UBOOT对从 Nand Flash 启动的支持.............................................................................82
3.1.1 从 Nand Flash 启动UBOOT 的基本原理................................................................82
3.1.2 支持 Nand Flash 启动代码说明.................................................................................82
3.2 UBOOT对 Nand Flash 命令的支持.................................................................................84
3.2.1 主要数据结构介绍.....................................................................................................84
3.2.2 支持的命令函数说明.................................................................................................85
4 在 Linux 对Nand Flash 的支持.................................................................................................87
4.1 Linux 下Nand Flash 调用关系..........................................................................................87
4.1.1 Nand Flash 设备添加时数据结构包含关系..............................................................87
4.1.2 Nand Flash 设备注册时数据结构包含关系..............................................................87
4.2 Linux 下Nand Flash 驱动主要数据结构说明..................................................................88
4.2.1 s3c2410 专有数据结构...............................................................................................88
4.2.2 Linux 通用数据结构说明..........................................................................................89
4.3.1 注册 driver_register....................................................................................................94
4.3.2 探测设备 probe...........................................................................................................94
4.3.3 初始化 Nand Flash 控制器.........................................................................................94
4.3.4 移除设备.....................................................................................................................94
4.3.5 Nand Flash 芯片初始化..............................................................................................94
4.3.6 读 Nand Flash............................................................................................................95
4.3.7 写 Nand Flash.............................................................................................................95
第八部分 Cs8900a网卡驱动的编写与移植...................................................................................95
1 Cs8900a工作原理......................................................................................................................95
2 在 ADS下cs8900a的实现........................................................................................................95
2.1 在 cs8900a下实现的ping 工具.........................................................................................95
3 在 uboot下cs8900a的支持......................................................................................................96
3.1 uboot 下cs8900a的驱动介绍...........................................................................................96
3.2 uboot 下cs8900a的移植说明...........................................................................................96
4 在 linux 下cs8900a驱动的编写与移植....................................................................................96
4.1 Linux 下cs8900a的驱动说明............................................................................................96
4.2 Linux 下 cs8900a的移植说明...........................................................................................96
4.2.1 为 cs8900a建立编译菜单..........................................................................................96
4.2.2 修改 S3C2410相关信息............................................................................................97
序
该文档的目的是总结我们在工作中的一些经验,并把它们分享给喜欢 ARM 和 Linux 的朋友, 如有错误
之处,请大家多多指点. 同样, 我们也希望更多人能把自己的工作经验和体会加入该文档,让大家共同进步.
该文档是一份交流性文档, 只供个人学习与交流,不允许公司和企业用于商业行为