嵌入式linux内核制作

时间:2021-07-19 18:42:52

1.1 linux体系结构

嵌入式linux内核制作
 

1.为什么linux会被划分为用户空间和内核空间?

    答:ARM处理器提供其中工作模式:用户模式(usr),快速中断(Fiq),外部中断(irq),管理模式(svc),数据访问终止(abt),系统模式(sys),未定义指令异常(und),在不同的工作模式下拥有的权限是不一样的,linux利用这一机制,使用了两级来运行应用程序和linux内核,这样使操作系统本身得到了保护。

2.内核空间和用户空间是程序执行的两种不同地状态,通过系统调用和硬件中断能够完成从用户空间和内核空间的转移。


1.2 linux内核构架

嵌入式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   基于文本模式的菜单型配置,图形化
            < * >    选择该功能,
            <m>    选择该功能,需要时动态加载模块
            <    >    不选择该功能
           配置完后,配置文件为 .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