系统移植第四天
内核的配置编译
[1]拷贝linux-2.6.35-farsigt.tar.gz 到虚拟机
[2] tar xvf linux-2.6.35-farsigt.tar.gz
[3] 配置交叉编译器
在Makefile中,修改如下:ARCH ?= armCROSS_COMPILE ?= arm-cortex_a8-linux-gnueabi-
[4] 内核配置
cp arch/arm/configs/s5pc100_defconfig .config(内核存储当前配置的文件) 恢复开发板默认配置
make menuconfig 根据需要修改内核配置
内核配置项添加(即:加Kconfig脚本文件)
[1] 创建实验目录
mkdir hello
[2] 创建实验目录中的Kconfig脚本文件
cp ../Kconfig .
[3] 修改Kconfig脚本为实验脚本
1. 打开Kconfig脚本的时候,如果提示是否转换为dos文件,一定要选择否,因为Kconfig脚本文件必须为非dos(linux文本文件)2. 添加实验脚本
[4] 添加新的Kconfig脚本到内核工程
1. 打开上一级目录的Kconfig脚本2. 添加如下语句:source “driver/hello/Kconfig”(这个路径一定要从内核源代码树的跟目录开始)
内核启动过程
[1] 检查cpu的id
从cpu硬件里面读取cpu id,和内核中支持cpu的列表进行对比,如果说没有找到,打印‘p'出错的可能性很小
[2] 检查主板id
用r1中的mach type id值(u-boot传输过来的)和内核支持的mach type id列表进行对比,如果没有找到,打印'a'出错的可能性非常大,如果出错,检查BootLoader传输到r1的值是否正确
[3] 内核驱动模块(静态编译到内核)的循环加载
如果加载的驱动模块存在问题,会导致内核启动崩溃在加入新的驱动后,容易出现这个问题
[4] 打开console终端,并且把它指定为内核的标准输入、标准输出和标准错误
如果console终端打开失败,内核可以继续启动,但是会出现警告
[5] 挂载根文件系统(即:挂载到“/"的文件系统)
如果挂载根文件系统失败,内核会直接挂死
这个错误经常出现,常见的问题:
1. root=参数指定的设备不存在,或者该设备上没有存放根文件系统
2. 根文件系统类型,内核无法失败,或者编译根文件系统的编译器和编译内核的编译器不兼容
[6] 在根文件系统中寻找init程序(第一个运行的应用程序)
如果指定的init程序不存在或者格式不内核无法支持,会运行失败,内核会直接挂死
这个错误经常出现,常见的问题:
1. 检查init=参数指定的文件是否存在
2. 检查init=参数指定的应用程序文件格式内核是否支持
内核配置
[1] 配置原理
Kconfig 产生配置项值
[2] 编译原理(编译过程、模块编译原理)
obj-y 静态编译到内核的目标文件
obj-m 动态编译到内核的目标文件
obj-$(配置项)
[3] 内核启动流程
1. 内核检查是否支持指定的CPU(正在运行)
不支持: 打印p错误
2. 内核检查是否支持指定主板(正在运行)
不支持:打印a错误
原因:
1. 内核不支持主板
在做最小系统调试,不可能出现
2. BootLoder传递给内核的mach id错误
在做最小系统调试,只可能是这种情况
3. 驱动加载(静态加载的驱动)
出错:驱动出错有可能导致内核崩溃
4. 打开console终端,把它做为标准输入、标准输出和标准错误
出错:出错会打印错误信息
5. 挂载根文件系统到"/“
出错:挂死
原因:
内核的root=参数指定的文件系统所在的设备错误
1. root=参数指定的设备不存在
2. 设备存在,但设备上没有文件系统
3. 设备存在,文件系统也有,但是内核不支持文件系统格式
6. 启动init进程
出错:挂死
原因:
1. 文件系统中没有init=参数指定的程序
2. 文件系统中存在init程序,程序的格式内核不支持