花了一周时间 总算成功编译了 2.6.30内核
中间出了一堆问题,vmware版本问题 ubuntu10.10连无线网问题 ubuntu宿主机文件共享问题 鼠标释放问题 redhat编译缺库问题 。。。。。
对于我这种linux大内低手而言 都是一道道坎儿。好几次想放弃 直接装个高内核版本的ubuntu算了,最后还是坚持下来了 奖励下自己 呵呵
简述编译过程 以后忘了 想捡起来容易些
先说一些假单命令 老是忘:
关机重启命令:
1、reboot
2、shutdown -r now 立刻重启(root用户使用)
3、shutdown -r 10 过10分钟自动重启(root用户使用)
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用)
如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启
关机命令:
1、halt 立刻关机
2、poweroff 立刻关机
3、shutdown -h now 立刻关机(root用户使用)
4、shutdown -h 10 10分钟后自动关机
如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启
vi
赋值7行 7yy, p
删除多行 7dd 删除单字 x 或X(光标前后区别),,删除多字 7x(7X)
行号 set nu
编译过程简单,容后述,现将编译工具和库的安装:
ubuntu9.04,联网正常的情况下
apt-get install build-essential(安装gcc,make等编译工具)
apt-get install libncurses-dev (安装menuconfig所需的库文件)
apt-get install kernel-package
apt-get install fakeroot(生成kernel-image的工具)
apt-get install initramfs-tools(生成initramfs的工具),modules-init-tools(安装modules的工具)
如果要GTK make gconfig
apt-get update
apt-get install libncurses5 wget bzip2
这些做好后 基本成功99%,然后
make mrproper(清空之前编译影响)
make menuconfig(有qt的话,可以xconfig)
make j10(多线程并行 能快些,之后可以在arch/x86/boot下可以看到bzImage)
make install(把bzImage拷贝到/boot下,并改名为vmlinux-2.6.30,同时吧 .config文件拷贝到/boot 中,改名为config-2.6.30)
make modules_install (配置文件中设置为‘m’的被编译成好多模块,将它们安装到/lib/modules中)
mkinitramfs -o /boot/initrd.img-2.6.30 /lib/modules/2.6.30(创建initramfs,一个临时根文件系统)
修改grub项(menu.lst文件的启动内核选项添加一项)然后reboot
简单介绍initrd 和 initramfs的概念,以待以后详细研究
initial RAM disk Linux® 初始 RAM磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再将这个 initrd RAM 磁盘卸载,并释放内存。在很多嵌入式Linux 系统中,initrd 就是最终的根文件系统。本文将探索 Linux 2.6 的初始 RAM 磁盘,包括如何创建以及如何在Linux 内核中使用。
initramfs与initrd类似,也是初始化好了且存在于ram中的,可以压缩也可以不压缩。但是目前initramfs只支持cpio包格式,它会被populate_rootfs->unpack_to_rootfs(&__initramfs_start, &__initramfs_end - &__initramfs_start, 0)函数(解压缩、)解析、安装。
initramfs与initrd区别
(1) Linux内核只认cpio格式的initramfs文件包(因为unpack_to_rootfs只能解析cpio格式文件),非cpio格式的 initramfs文件包将被系统抛弃,而initrd可以是cpio包也可以是传统的镜像(image)文件,实际使用中initrd都是传统镜像文件。
(2) initramfs在编译内核的同时被编译并与内核连接成一个文件,它被链接到地址__initramfs_start处,与内核同时被 bootloader加载到ram中,而initrd是另外单独编译生成的,是一个独立的文件,它由bootloader单独加载到ram中内核空间外的地址,比如加载的地址为addr(是物理地址而非虚拟地址),大小为8MB,那么只要在命令行加入"initrd=addr,8M"命令,系统就可以找到 initrd(当然通过适当修改Linux的目录结构,makefile文件和相关代码,以上两种情况都是可以相通的)。
(3) initramfs被解析处理后原始的cpio包(压缩或非压缩)所占的空间(&__initramfs_start - &__initramfs_end)是作为系统的一部分直接保留在系统中,不会被释放掉,而对于initrd镜像文件,如果没有在命令行中设置"keepinitd"命令,那么initrd镜像文件被处理后其原始文件所占的空间(initrd_end - initrd_start)将被释放掉。
(4) initramfs可以独立ram disk单独存在,而要支持initrd必须要先支持ram disk,即要配置CONFIG_BLK_DEV_INITRD选项 -- 支持initrd,必须先要配置CONFIG_BLK_DEV_RAM -- 支持ram disk ,因为initrd image实际就是初始化好了的ramdisk镜像文件,最后都要解析、写入到ram disk设备/dev/ram或/dev/ram0中。
注: 使用initramfs,命令行参数将不需要"initrd="和"root="命令? YES