boot-loader的stage1:硬件设备初始化-为stage2准备RAM空间-拷贝stage2到RAM空间-设置好堆栈-跳转到stage2的C入口点。
stage2:初始化本阶段所用的硬件设备-检测系统内存映射-将KERNEL映像和根文件系统映像从flash读到RAM中-为内核设置启动参数-调用内核。
(1)移植之前,首先拷贝开发所需的源代码包。
(2)编译应用程序之前,配置GUI的lib库。
(3)修改lib库的相关选项,让其适合于ARM平台。
(4)对lib库相关文件的修改,让GUI与linux内核通信。
移植LINUX内核:
移植准备:
1、获取内核源码 下载后,能后解压.
2、内核源码结构及makefile分析:支持上s3c2410芯片的的完整内核文件达到1万多个。这些文件分别位于顶层目录下的17个子目录:arch、block、crypto、drivers、fs、include、init、ipc、kernel、lib、mm、net、security、sound、user、scripts。
makefile的作用:决定编译哪些文件、怎样编译这些文件、怎样连接这些文件。
linux的makefile文件分类:
内核的Kconfig分析:
过程:
linux的内核启动过程:
大概分为两部分:开发板相关的引导过程、后续通用的启动过程。
修改内核以支持S3C2410开发板。
修改MTD分区:1、驱动对设备的识别过程——用两个数据结构来描述这两个设备和驱动程序:platform_device\platform_driver.2\修改MTD分区:将nand_flash分为三个区:前2MB存放内核、接下来的8MB存放JFFS2文件、剩下的存放YAFFS文件。3、移植YAFFS2文件系统过程:(1)将yaffs2代码加入内核(2)配置、编译内核。
那么现在的内核已经基本可以使用了,可以将它烧入NAND FLASH中了。
linux内核调试技术:
几种内核调试方法:printk、kgdb、分析OOPS、栈回溯。
使用调试工具。
GDB的安装-使用arm-linux-GDB调试内核(1)启动内核(2)启动ARM-LINUX-GDB.
windows、linux环境下相关工具、命令的使用
source insight、 在windows和linux之间进行文件传输工具Cuteftp、远程登录工具secureCRT\
linux 环境下的工具:代码阅读工具KScope、远程登录工具C-kermit
基于QT的GUI开发:
QT移植:
主机开发环境的搭建:1、安装G 2、安装X11的相关库文件和开发包3、安装集成开发环境。
交叉编译、安装QTOPIA:1、编译、安装QT所依赖的库。
linux应用程序调试技术:
使用strace工具跟踪系统调用和信号:strace介绍与移植
使用memwatch 进行内存调试\mtrace\dmalloc\yamd.
二、
交叉编译工具链的构建:
所需资源 :安装包
1、 建立工作目录-建子目录2、建立环境变量3、编译安装binutils—包含的程序有addr2line、ar、as、c filt、libbfd等等。它的安装依赖于GCC、BASH、Glibc、make、perl等工具。
4、获得内核头文件、5、编译安装BOOT-trap gcc 6、建立glibc库7、编译安装完整的GCC。8、测试交叉编译工具链。
U-BOOT分析与移植
u-bootf分为stage1和stage2两个阶段。
(1)设置异常向量表
(2)设置CPU模式为SVC模式
(3)关闭看门狗
(4)禁制所有终端
(5)设置CPU的频率
(6)设置CP15寄存器
(7)配置内存控制寄存器
(8)配置栈空间
(9)BSS段清零
(10)复制NAND flash代码到RAM。
(11) 进入到C代码
2.uboot stage2 分析
Uboot的移植过程
软件环境——u-boot-1.1.3tar。bz2
Arm-linux-gcc 3.3.6
(1)修改makefile
(2)建立mike2410开发板目录
(3)建立配置头文件
(4)指定交叉编译器的路径
(5)测试编译
3.4基于s3c2410 开发板自己编写bootloader
系统的启动主要有两种方式:一种是直接从Nor Flash启动,另一种是可以将压缩的内存映像文件从flash中复制、解压到RAM中,然后再从RAM中启动。
Bootloader具体实现:
Stage1阶段:设置异常向量表、初始化看门狗和外围电路、初始化存储器、初始化堆栈、初始化数据区、跳转到c程序的main()函数。
Stage2阶段:(1)初始化系统频率(2)初始化I/O端口(3)初始化中断处理程序(4)串口初始化(5)其它部分的初始化(6)主程序循环
嵌入式linux内核移植:
移植分为三种情况:从一个硬件平台移植到另外一个硬件平台
每个arch目录代表支持多少个硬件平台:
Alpha、cris、ia64、m68knommu、sh、parc64、arm、v850、mips等等。
内核移植主要包括两方面的工作:arch目录下的体系结构的移植、二是移植drivers目录下的许多硬件驱动程序、最后是应用程序的移植。
因为硬件平台对于C语言是影响的:具体表现为:处理器的字长会影响数据类型的长度、数据对齐、字节顺序。
内核移植的准备:交叉编译链、下载内核代码、硬件准备。
内核移植:内核配置、内核编译、内核下载3个部分
内核配置:1、修改makefile2、设置NAND Flash分区:分为bootloader、kernel、rootfs、user四个分区。3、配置内核选项4
内核编译:1、清除冗余文件2、编译内核映像和模块3、安装模块
内核下载:
建立Linux根文件系统:
系统启动时,需要根文件系统来挂载。内核代码文件保存在根文件系统中,系统引导程序会从正广和根文件系统设备上把内核执行代码加载到内存中去。 以cramfs根文件系统为例:1、cramfs工具包主要是为了生成mkcramfs和cramfsck两个工具。2、构建———busybox
|