编译linux
内核步骤: 1、安装内核 如果内核已经安装(/usr/src/目录有linux子目录),跳过。如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm
文件(xx代表数字,表示内核的版本号),比如RedHat linux的RPMS目录是/RedH...、下载Linux0.11系统包,本链接的下载包已包含Bochs软件。点击打开链接http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040329.zip2、解压linux-0.11-devel-040329.zip,目录结构如下图所示:这里真正使用到的文件为:Bochs-2.1.1.exe 、bochsrc-hd.bxrc、bootimage-0.11、bootimage-0.11-hd、hdc-0.11.img3、点击Bochs-2.1.1.exe进行安装。4、安装完毕后,将所有linux-0.11-devel-040329下的文件,拷贝到刚才安装bochs下的根目录。原目录如下:拷贝过后目录为:5、拷贝完成后,运行bochsrc-hd.bxrc,若安装成功,打开即能见到如下界面:这已经是x86PC模拟器上,搭建完成的Linux *** 作系统。建立linux *** 作平台命令,就能 *** 作Linux。由于学习 *** 作系统需要,我们需要在Linux下,
编译 *** 作系统以及完成简单的源码修改,从而达到理解Linux内核的能力。接下来,主要演示Linux内核源码的修改,以及内核的编译过程。由于该Linux版本的原因,我们还需要对代码做出调整,方能成功编译。内核编译过程:1、进入/usr/src/linux 目录下,键入命令 cd ../src/linux ,如下图所示:2、进行编译,键入命令 make clean 和 make后。若出现如下所示错误:gcc-cc1: Invalid option "string-insns"。这是需将Linux目录下的Makefile文件中的-mstring-insns参数去掉。除此之外,每个子目录fs,lib,kernel以及kernel目录下的三个驱动程序子目录(math, blk_drv, chr_drv)的Makefike当中的-mstring-insns参数去除掉。此处只演示根目录下的Makefile文件修改。3、依次修改:/linux/Makefile、/linux/fs/Makefile、/linux/lib/Makefile、/linux/kernel/Makefile、/linux/kernel/math/Makefile、/linux/kernel/blk_drv/Makefile、/linux/kernel/chr_drv/Makefile文件。linux目录下,键入:vi Makefile。如下图所示:找到文件中的-mstring-insns 参数,并删去保存。4、到/usr/local/bin中找到文件ar,并把ar 改名为gar,键入命令:mv ar gar。如下图所示:5、回到linux 目录下,重新键入make clean以及 make,完成内核的编译链接。出现上图提示,即表面程序编译成功。完成编译后,便可以开始修改内核源码,从而达到扩展 *** 作系统功能以及学习 *** 作系统的目的。这里,我们简单修改下,linux *** 作系统开机启动项bootsect.s源码,让开机后输出个性化的字符串。6、进入/usr/src/linux/boot目录,修改bootsect.s源码,保存并退出。! Print some inane messagemovah,#0x03! read cursor posxorbh,bhint0x10movcx,#47movbx,#0x0007! page 0, attribute 7 (normal)movbp,#msg1movax,#0x1301! write string, move cursorint0x10msg1:.byte 13,10.ascii "Loading system ...this is create by demon".byte 13,10,13,10
.org 5087、修改完成后,在linux目录下,重新键入make命令,完成编译。8、make成功后生成引导启动映象文件Image。若需要输出这个Image文件, 可以首先备份bootimage-0.11-hd文件, 然后使用下面命令就会把bootimage-0.11-hd替换成新的引导启动文件,键入命令:dd bs=8192 if=Image of=/dev/fd0。如下图所示:9点击reset重启Linux *** 作系统。如下图所示:首先uname -r看一下你当前的linux内核版本
1、linux的源码是在/usr/src这个目录下,此目录有你电脑上各个版本的linux内核源代码,用uname -r命令可以查看你当前使用的是哪套内核,你把你下载的内核源码也保存到这个目录之下。
2、配置内核 make menuconfig,根据你的需要来进行选择,设置完保存之后会在当前目录下生成.config配置文件,以后的编译会根据这个来有选择的编译。
3、编译,依次执行make、make bzImage、make modules、make modules
4、安装,make install
5、.创建系统启动映像,到 /boot 目录下,执行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改启动项,因为你在启动的时候会出现多个内核供你选择,此事要选择你刚编译的那个版本,如果你的电脑没有等待时间,就会进入默认的,默认的那个取决于 /boot/grub/grub.cfg 文件的设置,找到if [ "${linux_gfx_mode}" != "text" ]这行,他的第一个就是你默认启动的那个内核,如果你刚编译的内核是在下面,就把代表这个内核的几行代码移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
当然你也可以修改 set default="0"来决定用哪个,看看你的内核在第几位,default就填几,不过我用过这种方法,貌似不好用。
重启过后你编译的内核源码就成功地运行了,如果出现问题,比如鼠标不能用,usb不识别等问题就好好查查你的make menuconfig这一步,改好后就万事ok了。
最后再用uname -r看看你的linux内核版本。是不是你刚下的那个呢!有没有成就感?
评论列表(0条)