Linux内核制作

来源:互联网 发布:linux https 编辑:程序博客网 时间:2024/05/19 19:13
一、Linux内核简介
1.1 Linux系统架构
Linux体系结构:用户空间(用户接口、C库),内核空间(系统调用、内核、结构支持内核代码)。
分成两个结构,可以使操作系统本身的到充分的保护。内核空间与用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。

1.2 Linux内核架构


1.3 Linux内核源码
www.kernel.org
Linux内核源代码采用树形结构进程组织,非常合理的把功能相关的文件都放在同一个子目录下,使得程序更具可读性。
arch目录:内核所支持的CPU体系,在该目录下都有对应的子目录。每个CPU的子目录,又进一步分解为boot,mm,kernel等子目录,分别包含控制系统引导,内存管理,系统调用等
fs目录:存放各种文件系统的实现代码。每个子目录对应一种文件系统的实现,公用的源程序用于实现虚拟文件系统vfs。
net目录:网路协议的实现代码

二、Linux内核配置与编译
2.1 为什么要配置内核
1. 硬件的需求
2. 软件的需求
选出需要的,去掉不要的

2.2 内核配置方法
make config:基于文本模式的交互式配置
make menuconfig:基于文本模式的菜单型配置。

2.3 内核配置的结果在哪里?
刚编译的在内核文件下的.config。
内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件,Linux内核提供了一系列可供参考的内核配置文件,位于Arch/$cpu/configs

2.4 内核编译--make zImage--make bzImage
*区别:在X86平台,zImage只能用于小于512K的内核
*如需获取详细编译信息,可使用:
make zImage V=1
make bzImage V=1
** 编译好的内核位于arch//boot/目录下 **

2.5 编译内核模块
编译内核模块:make modules    
将编译好的内核模块,从内核源代码目录复制至/lib/modules下**,为打包做好准备:  make modules_install

2.6 制作init ramdisk
方法:mkinitrd initrd-$version $version
例:mkinitrd initrd-2.6.32 2.6.32
*$version /lib/modules 可以通过查询下的目录得到

2.7 安装内核(x86)
1、cp arch/x86/boot/bzImage
/boot/vmlinuz-$version
2、cp initrd-$version /boot/
3、修改/etc/grub.conf

2.8 清理内核
make clean:清理的是*.o,配置文件.config
make distclean:清理的是*.ko和*.o,配置文件.config

三、嵌入式内核制作
3.1 嵌入式系统构成

3.2 内核制作步骤
2、配置内核
x86: make menuconfig
arm: make menuconfig ARCH=arm
3、编译内核
x86: make bzImage
arm: make uImage ARCH=arm CROSS_COMPILE=arm-linux-

编译后报错:
  1. Kernel: arch/arm/boot/zImage is ready
  2. UIMAGE arch/arm/boot/uImage
  3. "mkimage" command not found - U-Boot images will not be built
  4. Image arch/arm/boot/uImage is ready
赋值uboot的tools/mkimage到/bin目录下。重新编译

点击(此处)折叠或打开

  1. Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
  2. Backtrace:
  3. [] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1c)
  4. r7:c380c0cb r6:c04f4d80 r5:c380c000 r4:c381df40
  5. [] (dump_stack+0x0/0x1c) from [] (panic+0x4c/0x12c)
  6. [] (panic+0x0/0x12c) from [] (mount_block_root+0x178/0x234)
  7. r3:00000000 r2:c38313ec r1:c381df40 r0:c0446f9c
  8. [] (mount_block_root+0x0/0x234) from [] (mount_root+0xb0/0xf4)
  9. [] (mount_root+0x0/0xf4) from [] (prepare_namespace+0x104/0x19c)
  10. r7:00000000 r6:c002483c r5:c002483c r4:c04f4744
  11. [] (prepare_namespace+0x0/0x19c) from [] (kernel_init+0xc8/0xf4)
  12. r6:c00236dc r5:c0023274 r4:c00236dc
  13. [] (kernel_init+0x0/0xf4) from [] (do_exit+0x0/0x620)
  14. r7:00000000 r6:00000000 r5:00000000 r4:00000000
没有制作文件系统

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(70) | 评论(0) | 转发(0) |
0

上一篇:u-boot新手入门

下一篇:根文件系统制作

相关热门文章
  • SHTML是什么_SSI有什么用...
  • 查看linux中某个端口(port)...
  • 卡尔曼滤波的原理说明...
  • shell中字符串操作
  • 关于java中的“错误:找不到或...
给主人留下些什么吧!~~
原创粉丝点击