嵌入式linux内核制作

2019-07-12 15:57发布

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