嵌入式 Linux 内核制作
来源:互联网 发布:西宁大数据软件公司 编辑:程序博客网 时间:2024/05/21 17:29
Linux 内核简介
Linux系统架构:
Linux系统分为用户空间和内核空间两大部分。
如下图所示:
Linux采用两层结构的原因:
ARM有7种工作模式:
每种工作模式下有不同的权限。
用户空间和内核空间是程序执行的两种不同状态,通过 系统调用 和 硬件中断 可以完成从用户空间到内核空间的转换。
Linux内核的架构:
下载Linux内核可以访问官方网站:
www.kernel.org
内核源代码中部分关键文件夹说明
使用SourceInsight软件查看linux内核源代码
新建工程:
输入工程位置和名字。
选择 project has its own configuration file 点击 OK。
点击project菜单选择向工程中添加或删除文件,
大约会由3万多个文件会添加进入工程中。
添加结束后,点击close。
然后进行同步:
点击如下图所示的按钮进行同步,
这样就可以查看不同文件下相同名称的函数。
Linux 内核配置与编译
配置内核:
为什么要配置内核:
1、基于硬件的需求。如果linux内核要安装在arm平台上,则内核安装映像中就不需要包含mips、x86有关的代码。
2、基于软件的需求。例如如果linux系统仅仅需要ipv4协议,就不需要安装ipv6协议的内容。
基于以上两点,在编译linux内核之前需要对内核进行配置,选出需要的,去掉不要的。
内核配置方法:
make config:基于文本模式的交互式配置。
make menuconfig:基于文本模式的菜单型配置
通常采用第二种配置方式,比较直观简便和高效。
在内核源代码根目录下输入“make menuconfig”,然后回车,如下图所示:
得到如下的界面:
界面中会有操作提示,通过回车上下左右按键来选择配置的内容。
配置选项:通过空格键来选择
[ * ] / < * > :本次编译要选择该功能,将.c文件编译成.o文件,然后连接成为zImage文件,即内核映像文件。设备启动后,存放在内存中。
< M > :本次编译要选择该功能,为module的缩写,内核模块,.o文件会存放在某文件夹中,存放在硬盘中,当系统需要使用某一模块,就加载到内存中,这样可以节约内存空间。
[ ] / < > :本次编译不选择该功能。
内核配置结果保存位置:
输入ls -a 命令,可以查看隐藏文件,看到 .config 文件,即为配置保存结果。在很熟悉.config文件的前提下,直接修改该文件也可以对内核进行配置。
可以参考已有的配置结果文件:
内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件,Linux内核提供了一系列可供参考的内核配置文件,位于Arch/cpu对应的文件夹/configs文件夹下
对于不清楚的配置项,可以直接采用默认配置。
在上图的位置中,配置菜单的最下方,可以输入配置文件的路径和文件名,装载某一个参考配置。
编译内核:
分为3个部分:编译内核映像、编译内核模块、将内核模块打包制作ramdisk
1、编译内核映像:
执行命令 “ make bzImage V=1 ”,V=1是编译选项,可以显示编译过程中的信息。
也可以执行命令“make zImage V=1”,但是在x86平台上,zImage只能用于小于512K的内核,而且在一些新的版本中已经不再支持该命令。
编译好的内核位于arch/< 相关的cpu >/boot/目录下。
例如:
2、编译内核模块
编译内核模块,执行“make modules”命令,对内核模块进行编译。编译好之后,编译生成的.ko文件散落在各个目录之中。
将编译好的内核模块,从内核源代码目录复制至 虚拟机的目录/lib/modules下,为打包做好准备。
方法:执行“make modules_install”命令
命令名字虽然是install但是实际上是移动。
3、打包内核模块,制作ramdisk
方法:mkinitrd initrd-xxxx xxxx
例如:mkinitrd initrd-2.6.39 2.6.39
xxxx 与目录 /lib/modules 下的内核文件夹名称相同
其中 initrd-xxxx 是打包之后生成的包的名字,这个名字可以自己随意取,最后2.6.39是内核文件夹名称不能随便写。
安装内核:
如下是在x86平台上安装linux内核的方法,在arm平台上不采用。
1、cp 内核代码/arch/x86/boot/bzImage /boot/vmlinuz-$xxxx 其中xxxx为版本号
2、cp ramdisk文件 /boot/
3、修改/etc/grub.conf
重启linux,在倒计时时按下回车键,会选择启动哪一个linux内核,这样就完成了在x86平台上的安装。
使用 uname -r 命令可以查看当前运行的内核版本。
在更换内核之后,重新启动系统,会发现系统界面和文件等都没有发生改变,linux分为用户空间和内核空间,内核是在内存中,文件系统在硬盘中,只更换内核不会改变跟文件系统,因此界面没有改变。
清理内核:
在编译过程中产生了 .o 文件 和 .ko 文件, 在配置过程中产生了 .config 文件。
两个指令:
make clean 清空 .o .ko 文件
make distclean 清空 .o .ko 文件和 .config 文件
嵌入式 Linux 内核制作
需要下载对应于开发板的linux内核。
制作嵌入式平台使用的Linux内核,方法和制作PC平台的Linux内核基本一致。
1、清除原有配置与中间文件
x86: make distclean
arm: make distclean
2、配置内核
x86: make menuconfig
arm: make menuconfig ARCH=arm
如果要运行在mips或ppc平台上,则写ARCH=mips或ARCH=ppc
3、编译内核
x86: make bzImage
arm: make uImage ARCH=arm CROSS_COMPILE=arm-linux-
注意:在缺少根文件系统时,linux系统的内核无法继续运行。
- 嵌入式linux内核制作
- 嵌入式linux内核制作
- 嵌入式linux内核制作
- 嵌入式linux内核制作
- 嵌入式Linux内核制作
- 嵌入式linux内核制作
- 嵌入式 Linux 内核制作
- 嵌入式linux内核制作流程
- 嵌入式Linux内核的制作
- 嵌入式linux内核的制作
- linux学习--嵌入式linux内核制作
- 嵌入式linux内核与根文件系统制作
- 嵌入式Linux内核,文件系统的制作
- 嵌入式Linux内核,文件系统的制作
- 3-03 嵌入式Linux内核制作
- 嵌入式内核制作
- Linux内核制作与嵌入式根文件系统的构建
- 【转载】 嵌入式linux内核及根文件系统的制作过程
- 【模板】Trie树(基于指针)
- android binder机制---ProcessState和线程池
- Lackey:一个示例工具
- Linux新手入门:Unable to locate package错误解决办法
- 多线程的学习1
- 嵌入式 Linux 内核制作
- 多线程拾遗
- Nulgrind:最小的Valgrind工具
- HDU_2031 进制转换
- PS的基础操作
- 置换元素&&非置换元素
- Idea数据库操作(Cross Join)
- 什么是ES6?
- leetcode483. Smallest Good Base 的一些思考