1.1 linux体系结构
1.为什么linux会被划分为用户空间和内核空间?
答:ARM处理器提供其中工作模式:用户模式(usr),快速中断(Fiq),外部中断(irq),管理模式(svc),数据访问终止(abt),系统模式(sys),未定义指令异常(und),在不同的工作模式下拥有的权限是不一样的,linux利用这一机制,使用了两级来运行应用程序和linux内核,这样使操作系统本身得到了保护。
2.内核空间和用户空间是程序执行的两种不同地状态,通过系统调用和硬件中断能够完成从用户空间和内核空间的转移。
1.2 linux内核构架
2.1 下载linux内核源代码 www.kernel.org
2.2 目录结构
linux内核源代码采用树形结构进行组织,非常合理的把功能相关的文件都放在同一个目录下,是程序更具可读性
arch目录:arch是architecture的缩写,内核所支持的每种cpu体系,在该目录下都有对应的子目录,每个cpu的子目录又分为boot,mm,kernel等子目录,分别包含控制系统引导,内存管理,系统调用等。
document:内核文档
drivers目录:设备驱动程序
include目录:内核所需要的头文件,与平台无关的头文件在include/linux子目录中,与平台相关的头文件放在相应的子目录中
fs目录:存放各种文件系统的实现代码,每个子目录对应一种文件系统的实现,公用的源程序用于实现虚拟文件系统vfs
net目录:网络协议的实现
2.3 使用sourceInsight管理内核源代码
新建工程-添加代码-同步
Linux内核配置与编译
内核配置方法
make config 基于文本模式的交互式配置,一步步询问是否需要
make menuconfig 基于文本模式的菜单型配置,图形化
< * > 选择该功能,
选择该功能,需要时动态加载模块
< > 不选择该功能
配置完后,配置文件为 .config,.开头为隐藏文件ls -a查看
使用已有的内核配置文件简化配置:
PC下 /boot目录下有config文件,将此文件复制到源代码目录后,make menuconfig,选择最下面一项load an Alternate config file,然后输入路径
ARM下参考配置文件在源代码的arch/arm/configs
编译内核
make zImage : X86下,zImage只用于小与512K的内核
make bzImage
如需获取详细编译信息,加上编译选项V = 1
编译内核模块
make modules
执行下面命令,将编译好的内核模块,从内核源代码目录复制到/lib/modules下,为打包做准备
make modules_install
制作ramdisk
mkinitrd initrd-$version $version
$version可以通过查询/lib/modules下的目录得到
安装内核
1 .cp arch/x86/boot/bzImage /boot/vmlinuz-$version
2 .cp initrd-$version /boot/
3. 修改/etc/grub.conf
运行后uname -r 查看内核版本
清理内核
make clean 清理.o等中间文件
make distclean 清理.o等中间文件和 .config文件
嵌入式linux内核的制作
将开发版对应的内核复制到linux下,解压内核源代码,将配置文件复制到源代码下
1.清理原有配置文件和中间文件 make distclean
2.将对应的配置文件保存到源码目录,并重命名为.config
3.配置内核 make menuconfig ARCH=arm
4. 将uboot/tools下的mkImage拷贝到/bin/,这个会对内核加头
5.编译内核 make uImage ARCH=arm CROSS_COMPILE=arm-linux-
编译成功后,将uImage复制到tftp目录,cp uImage /tftpboot/
tftp c0008000 uImage
bootm c0008000