当前位置:  技术问答>linux和unix

怎么运行一个自己改了的内核

    来源: 互联网  发布时间:2016-10-14

    本文导语:  我在较早期的内核里面改了调度算法,想运行一下什么效果,可不知道linux系统下怎么运行,求高手帮忙。 | 一、准备工作 1、查看Linux内核版本 # uname -a 二、配置工作 2.6内核和4个升级工具...

我在较早期的内核里面改了调度算法,想运行一下什么效果,可不知道linux系统下怎么运行,求高手帮忙。

|
一、准备工作
1、查看Linux内核版本
# uname -a
二、配置工作
2.6内核和4个升级工具都下载完了
2、下载2.6内核源码
3、下载内核升级工具
(1)下载module-init-tools-3.2.tar.bz2
(2)下载mkinitrd-4.1.18-2.i386.rpm
(3)下载lvm2-2.00.25-1.01.i386.rpm
(4)下载device-mapper-1.00.19-2.i386.rpm
(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功的),下面回到Linux系统中开始配置工作吧。
4、将下载好的内核源码包和4个升级工具都拷贝到/usr/src文件夹下。
5、拷贝完毕,开始解压新内核:
5.1 # cd /usr/src // (进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)
5.2 # rm –rf linux //(删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过)
5.3 # tar jvxf linux-2.6.18.tar.bz2 // (解压新内核)
5.4 # ln -s linux-2.6.18 linux // (重新生成linux文件夹)
6、安装module-init-tools工具
在/usr/src目录下,依次执行下列命令:
6.1 # tar jvxf module-init-tools-3.2.tar.bz2 // (解压module-init-tools)  
6.2 # cd module-init-tools-3.2 // (由/usr/src目录进入module-init-tools目录下)
6.3 #./configure --prefix=/ / /( 配置文件的默认安装路径)
6.4 # make moveold // (保留原来内核配置文件,防止新内核无法使用时候可以正常进入系统) ----(前面的每一个步骤都必须执行,否则会出现这个错误:
make: *** No rule to make target `moveold'. Stop.!)
6.5 # make all install //(安装所有文件)
6.6 #./generate-modprobe.conf /etc/modprobe.conf // 用这个脚本生成/etc/modprobe.conf,./表示当前目录。这个文件必须要可执行。  
7、安装另外三个升级工具
回到/usr/src目录下,依次执行下列3个命令来安装另外三个升级工具:
7.1 # rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm //(注意,这里一定要加入--nodeps参数就是指不考虑相依属性的关系,给它強制的安裝下去)
7.2 # rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm
7.3 # rpm -ivh --nodeps device-mapper-1.00.19-2.i386.rpm
如果不更新以上几个升级包,在后面编译内核时会提示以下错误:
mkinitrd failed
make[1]: *** [install] Error 1
make: *** [install] Error 2
8、配置内核选项。
8.1 # cd linux-2.6.18 // (进入到/usr/src/linux-2.6.18目录下)
8.2 # make mrproper //(该命令可确保源代码目录下没有不正确的.o文件)
8.3 # make menuconfig // (配置内核各选项。如果你没有安装全部的必须配置文件,那么就不会进入图形界面,就会显示错误:
make[1]: *** [menuconfig] error 1make: *** [menuconfig] error 2。产生这个现象不仅仅是这个原因,还有就是缺少一个glibc-kernheaders-2.4-9.1.103.EL.i386.rpm)  
此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):
(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项;
(2) 2.1 Device Drivers--->Block Devices中选上“Loopback device support”;
  2.2 Device Drivers--->Multi-device support(RAID and LVM)处要选上“device mapper support”;
  2.3 Device Drivers--->Graphics support,一定要选上“ Support for buffer devices”;
  2.4 Device Drivers --->USB support --->选上“USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)
  2.5 Device Drivers --->;Network device support --->Ethernet (10 or 100Mbit) ---> AMD PCnet32 PCI support  
(3)File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
  3.1 Second extended fs support
  3.2 Ext2 extended attributes
  3.3 Ext2 POSIX Access Control Lists
  3.4 Ext2 Security Labels
  3.5 Ext3 journalling file system support
  3.6 Ext3 extended attributes
  3.7 Ext3 POSIX Access Control Lists
  3.8 Ext3 Security Labels
  3.9 JBD (ext3) debugging support
  3.10 File system--->DOS/FAT/NT Filesystems --->选上“NTFS file system support”;
注意:
ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你重启时机器就会宕机,出现如下错误信息:
kernel panic : no init found ,try passing init = option to kernel.....
或者是:
VFS:Cannot open root device "hdxy" or unknow-block(0,0)
Please append a correct "root=" boot option
kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)  
或者是:
mount: error 19 mounting ext3
pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
umount /initrd/proc fail: 2
Freeing unused kernel memory: 244k freed
Kernel panic – not syncing: No init found. Try passing init = option to kernel
(在教室时,我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~如果当你重启Linux系统后,若不幸进不去2.6.18内核,你会发现你的出错信息就是上面三种了~~~哈!)
(4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
4.1 Device Drivers --->SCSI device support (此项不选的话,下面两项就选择不上)
4.2 Device Drivers --->SCSI device support --->SCSI disk support
4.3 Device Drivers--->SCSI device support--->SCSI low-level drivers--->; BusLogic SCSI support
三、编译工作
9、开始编译啦……
在/usr/src/linux-2.6.18目录下,执行以下命令即可编译。编译需要一段时间,耐心等候
9.1 # make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)
9.2 # make clean (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)
9.3 # make bzImage (注意I大小写。这一步才是真正编译内核)
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用 make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。)
PS:在执行这一步可能会出现一个错误,不能够编译内核源代码,解决的方法是 在系统上安装一个GCC编译器,如果使用的是自己定制的系统,就当我没有说过这话哈!嘿嘿
9.4 # make modules (编译可加载模块)
9.5 # make modules_install (安装可加载模块)
安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。
9.6 # make install (安装新内核)
注意:
make install的时候可能会出现如下错误信息:
No module BusLogic found for kernel 2.4.12
mkinitrd failed
此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去:
9.7 # cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi
不过别忘记,复制过后再执行一下make install。这一步若卡住了,下面的都无法进行
四、启动新内核
10、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:  
10.1 # cp /usr/src/linux-2.6.18/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18  
10.2 # cp /usr/src/linux-2.6.18/System.map /boot/System.map-2.6.18  
10.3 # cd /boot (进入boot目录)
10.4 # rm –rf System.map (将会提示是否删除原来的连接,输入yes 回车)  
10.5 # ln –s System.map-2.6.18 System.map (提示是否重新建立连接,输入yes 回车)  
11、修改Grub启动管理器
如果没有错误的话, 下面开始修改grub配置文件
在/boot目录下,执行以下命令:
11.1 # new-kernel-pkg --mkinitrd --depmod --install 2.6.18 (这时候你的/boot下会生成一个initrd-2.4.18.img,并且你的grub.conf文件也作了相应更改)
11.2 # df (查看根目录在那个分区,下一步要用到。注意,这里根分区不时boot的那个50M的分区,而一般是你最大的那个分区,也就是“/”,千万不要搞错哦。我的为 /mnt/hgfs)
11.3 # vi /grub/grub.conf  
进入grub.conf文件,找到如下信息:
default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.18)
root (hd0,0)
kernel /vmlinuz-2.6.18 ro root= LABEL=/
initrd /initrd-2.6.18.img
做两处修改:
(1) 将default=1改为default=0 (不改的话也可以,只不过重启之后会默认进入2.4内核)
(2) 将kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)
此步很重要,修改错误将可能导致进不去系统。
我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.18)
root (hd0,0)
kernel /vmlinuz-2.6.18 ro root=/mnt/hgfs
initrd /initrd-2.6.18.img
title Red Hat Linux (2.4.20-8)
root (hd0,0)
kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
initrd /initrd-2.4.20-8.img
12,重启

|
build新的linux内核再run
1. under linux src dir:
make && make install
2. apply the new vmlinuz image 
如果是grub一般需要改/boot/menu.lst
建议google一下

    
 
 

您可能感兴趣的文章:

  • “模块”在内核中运行与作为单独进程运行在机制上有什么区别与联系?
  • 我用qemu来运行我修改了KGDB的内核选项 运行有问题
  • 用户空间的程序如何改成运行于内核的?
  • 内核的daemon运行于什么上下文
  • 嵌入式Linux换了内核后,运行应用程序显示Killed
  • 如何在linux中如何添加应用程序使其在内核启动后自动运行??
  • 刚下载一个内核源代码,怎样将它编译出来,然后安装运行呢?
  • 有没有什么办法能够查询到某个内核模块程序加载之后的运行情况?
  • Linux: 内核会不会在系统函数运行过程中临时挂起进程
  • 如何在shell下查看当前运行的内核版本号?
  • 飞凌2440 内核移植运行时遇上/dev/fb0打开失败
  • 编译在X86平台下运行的linux内核出错
  • 进程运行时,内核的哪部分来维护task_struct结构?
  • !!!散分帖:历尽千辛万苦,将LINUX0.11内核编译运行成功!!!
  • Sun Solaris运行Oracle数据库所需的内核参数
  • 加载内核模块运行helloworld与应用程序helloworld执行过程的区别?
  • 求助:开发板运行时的内核bug问题
  • uboot加载内核成功,但是运行不起来的问题--
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • SecureCRT上运行一个JAVA程序,该程序类似一个在WINDOWS下一直运行的CMD窗口的东西,SecureCRT关掉后,JAVA还会继续运行吗?
  • 在docker容器中运行hello world!
  • 如何运行外部命令后不等外部命令运行结束直接运行下一条命令
  • 通过docker ps命令检查运行中的docker镜像
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • 网络技术 iis7站长之家
  • 用Jbuilder3 遇到问题不能运行把可疑代码注掉后可以运行但是重新使用可疑代码时又可以运行了多次重复都是如此
  • 安装运行微软win7/Windows7系统要求及官方下载地址
  • telnet到主机去运行一个我编的程序,退出telnet时那个程序也不运行了,这是怎么回事?按程序逻辑它应该一直运行下去的。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 请问:进程创建的线程是怎样运行的啊,线程的处理函数运行完了,线程就退出了吗?
  • Ubuntu程序开机自动启动设置(服务和自动运行配置文件)的几种方法
  • tomcat下servlet无法运行,但是jsp可以运行,在线等待。。。
  • ​Windows Server 2016提供Docker原生运行的企业级支持
  • 请教为什么要运行一个可执行文件要以./文件名 的形式来运行?
  • windows下cmd命令提示符下让程序后台运行命令
  • 请问怎么改配置文件啊?能运行startx启动XWindow,运行X就不行呢?
  • 问一个crontab中不能运行手动可以运行的问题
  • 中断恢复现场时怎样判断进程运行到那一步,如何无缝连续运行的呢?
  • 关于shell脚本手动运行和自动运行的区别


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3