编译linux内核步骤:
1、安装内核
如果内核已经安装(/usr/src/目录有linux子目录),跳过。如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号),比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,然后使用命令rpm -ivh kernel-source-2.xx.xx.rpm安装内核。如果没有安装盘,可以去各linux厂家站点或者www.kernel.org下载。
2、清除从前编译内核时残留的.o 文件和不必要的关联
cd /usr/src/linux
make mrproper
3、配置内核,修改相关参数,请参考其他资料
在图形界面下,make xconfig;字符界面下,make menuconfig。在内核配置菜单中正确设置个内核选项,保存退出
4、正确设置关联文件
make dep
5、编译内核
对于大内核(比如需要SCSI支持),make bzImage
对于小内核,make zImage
6、编译模块
make moles
7、安装模块
make moles_install
8、使用新内核
把/usr/src/linux/arch/i386/boot/目录内新生成的内核文件bzImage/zImage拷贝到/boot目录,然后修改/etc/lilo.conf文件,加一个启动选项,使用新内核bzImage/zImage启动。格式如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-new ### 告诉lilo缺省使用新内核启动linux ###
append="mem=256M"
image=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda5
image=/boot/bzImage(zImage)
label=linux-new
read-only
root=/dev/hda5
保留旧有的启动选项可以保证新内核不能引导的情况,还可以进入linux进行其他操作。保存退出后,不要忘记了最重要的一步,运行/sbin/lilo,使修改生效。
9、重新生成ram磁盘
如果您的系统中的/etc/lilo.conf没有使用了ram磁盘选项initrd,略过。如果您的系统中的/etc/lilo.conf使用了ram磁盘选项initrd,使用mkinitrd initrd-内核版本号,内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
之后把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:
initrd=/boot/initrd-2.2.14-5.0
ram磁盘能使系统性能尽可能的优化,具体参考/usr/src/linux/Documents/initrd.txt文件
10、重新启动,OK!
② 如何重新编译linux内核
因为一般电脑安装的系统都是Windows,而整个编译过程都需要在Linux环境下实现,所以最好是在虚拟机里安装Linux系统来完成这一过程。我使用的虚拟机是VMware-workstation-full-v7.1.4。
然后,我们需要下载一个较高版本的Linux系统的镜像文件,安装在虚拟机上,作为编译环境。我使用的是ubuntu-11.04-desktop-i386。之所以选择较高版本,是因为它的界面比较方便用户操作。
然后下载一个Linux内核源代码文件,将它保存到虚拟机上新安装的系统中去。并解压到/usr/src目录。我使用的是linux-2.6.36,下载低版本的原因是,小巧轻便,易于编译。
解压命令如下:
bzip2
-d
linux-2.6.36.tar.bz2
tar
-xvf
linux-2.6.36.ta
修改/usr/src/linux-2.6.36/kernel/sys.c文件,在文件末尾增加一个系统调用函数。自行编写一个简单的程序即可,只为测试用。
修改/usr/src/linux-2.6.36/arch/x86/kernel/syscall_table_32.S,为新添加的程序配置系统调用号。
在/usr/src/linux-2.6.36/arch/x86/include/asm/unistd_32.h中配置系统调用表。
下面就是最重要的内核编译与安装:
首先配置编译信息,使其生成适合当前机器的Makefile,输入make
oldconf
ig。
接着还要输入make
menuconfig,在字符界面下进行必要的细微的修改。
然后要经过四步编译过程(直接输入命令即可):
(1)make
bzImage
将内核编译为压缩映像,存储在源码根目录下的“System.map”文件中。
(2)make
moles
编译各个模块。
(3)sudo
make
moles_install
安装模块
(4)sudo
make
install
安装内核
第(2)(3)步等待时间较长,可能需要数个小时,请耐心等待。
无报错的话重启进入GRUB界面,就可以看到新编译的内核了。
按回车键进入我们编译的目标内核中,用关键词搜索查看新增加的系统调用“my
call”是否已在内核中:
编写测试程序,调用新添加的系统调用:
测试成功,说明系统调用添加成功,进而说明内核编译成功!
以上的办法你可以试一下,希望对你有所帮助。
③ linux怎么编译进驱动进内核
一、 驱动程序编译进内核的步骤
在 linux 内核中增加程序需要完成以下三项工作:
1. 将编写的源代码复制到 Linux 内核源代码的相应目录;
2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项;
3. 在目录的 Makefile 文件中增加对新源代码的编译条目。
bq27501驱动编译到内核中具体步骤如下:
1. 先将驱动代码bq27501文件夹复制到 ti-davinci/drivers/ 目录下。
确定bq27501驱动模块应在内核源代码树中处于何处。
设备驱动程序存放在内核源码树根目录 drivers/ 的子目录下,在其内部,设备驱动文件进一步按照类别,类型等有序地组织起来。
a. 字符设备存在于 drivers/char/ 目录下
b. 块设备存放在 drivers/block/ 目录下
c. USB 设备则存放在 drivers/usb/ 目录下。
注意:
(1) 此处的文件组织规则并非绝对不变,例如: USB 设备也属于字符设备,也可以存放在 drivers/usb/ 目录下。
(2) 在 drivers/char/ 目录下,在该目录下同时存在大量的 C 源代码文件和许多其他目录。所有对于仅仅只有一两个源文件的设备驱动程序,可以直接存放在该目录下,但如果驱动程序包含许多源文件和其他辅助文件,那么可以创建一个新子目录。
(3) bq27501的驱动是属于字符设备驱动类别,虽然驱动相关的文件只有两个,但是为了方面查看,将相关文件放在了bq27501的文件夹中。在drivers/char/目录下增加新的设备过程比较简单,但是在drivers/下直接添加新的设备稍微复杂点。所以下面首先给出在drivers/下添加bq27501驱动的过程,然后再简单说明在drivers/char/目录下添加的过程。
2. 在/bq27501下面新建一个Makefile文件。向里面添加代码:
obj-$(CONFIG_BQ27501)+=bq27501.o
此时,构建系统运行就将会进入 bq27501/ 目录下,并且将bq27501.c 编译为 bq27501.o
3. 在/bq27501下面新建Kconfig文件。添加代码:
menu "bq27501 driver"
config BQ27501
tristate"BQ27501"
default y
---help---
Say 'Y' here, it will be compiled into thekernel; If you choose 'M', it will be compiled into a mole named asbq27501.ko.
endmenu
注意:help中的文字不能加回车符,否则make menuconfig编译的时候会报错。
4. 修改/drivers目录下的Kconfig文件,在endmenu之前添加一条语句‘source drivers/bq27501/Kconfig’ 对于驱动程序,Kconfig 通常和源代码处于同一目录。 若建立了一个新的目录,而且也希望 Kconfig 文件存在于该目录中的话,那么就必须在一个已存在的 Kconfig 文件中将它引入,需要用上面的语句将其挂接在 drivers 目录中的Kconfig 中。
5. 修改/drivers目下Makefile文件,添加‘obj-$(CONFIG_BQ27501) +=bq27501/’。这行编译指令告诉模块构建系统在编译模块时需要进入 bq27501/ 子目录中。此时的驱动程序的编译取决于一个特殊配置 CONFIG_BQ27501 配置选项。
6. 修改arch/arm目录下的Kconfig文件,在menu "Device Drivers……endmenu"直接添加语句
source "drivers/bq27501/Kconfig"
④ 如何编译linux的x86内核
Gcc编译器, Linux-2.6.29内核
步骤:
(一):清除临时文件,中间文件和配置文件等(刚从网上下载下来的文件这步可省略)。
make clean
删除大多数的由编译生成的文件、但会保留内核的配置文件.config。
make mrproper
删除所有的编译生成的文件,还有内核配置文件,再加上各种备份文件。
make distclean
mrproper删除的文件,加上编辑备份文件和一些补丁文件。
(二)选择参考配置文件
使用正在运行的内核配置文件作为参考配制文件,该配置文件在/boot目录下,使用命令
cp /boot/config-2.6.18-53.el5 .config。
(三)配置内核
配置内核有如下命令:
make config:基于文件模式的交互式配置(也就是一问一答)。
make menuconfig:基于文本模式的菜单式配置(强烈推荐)。
make oldconfig:使用已有的配置文件(.config)但是会询问新增的配置选项。
make xconfig:图形化配置(需要安装图形化系统)。
make menuconfig是最为常用的内核配置方式,使用方法如下:
1、使用方向键在各选项间移动;
2、使用“Enter”键进入下一层选单;每个选项上的高亮字母是键盘快捷方式,使用它可以快速地到达想要设置的选单项。
3、在括号中按“y”将这个项目编译进内核中,按“m”编译为模块,按“n”为不选择(按空格键也可在编译进内核、编译为模块和不编译三者间进行切换),按“h”将显示这个选项的帮助信息,按“Esc”键将返回到上层选单。
内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件Linux内核提供了一系列可供参考的内核配置文件,位于Arch/$cpu/configs
注意:要运行make menuconfig的界面需要调整终端的窗口大小,至少为80*19。
(四)编译内核
(1):make zImage
(2):make bzImage
区别:在X86平台,在zImage只能用于小于512Kd的内核(注意是X86平台)
如需获取详细编译信息,可使用:
make zImage V=1
make bzImage V=1
编译好的内核位于arch/<cpu>/boot目录下
(五)编译内核模块
使用命令make moles
内核模块编译的时间比较长,一般需要1~2小时的时间。这些模块源于使用命令make menuconfig启动的菜单型配置界面中选择<m>的项。
(六)安装内核模块
使用命令:make moles_install,完成安装后,编译好的内核模块会从内核源代码目录拷贝至/lib/moles/2.6.29目录下。
(七)制作init ramdisk
使用cd跳动linux-2.6.29/,目录的上层目录,使用命令:mkinitrdinitrd-$version $version(mkinitrd initrd-2.6.29 2.6.29)将上一步中产生的模块目录/lib/moles/2.6.29制作成initrd-2.6.29。
提示:initrd是“initial ramdisk”的缩写,initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。在桌面或服务器Linux系统中,initrd是一个临时的文件系统。其生命周期很短,只会用作真实文件系统的一个桥梁。在没有存储设备的嵌入式系统中,initrd可以是永久的根文件系统。
Linux的众多发行版之所以使用initrd主要是为了在内核启动之后能够判断哪些硬件驱动需要加载,哪些不需要,文件系统有没有问题等,最终使得根分区能顺利加载。在scsi和sata设备上启动,usb启动盘,无盘服务器等都需要initrd来做判断,这样可以提高Linux内核的通用性。
(八)安装内核
由于Linux系统启动时,会从/boot目录下寻找内核文件与init ramdisk,所以需要将内核和initrd拷贝至/boot目录。使用命令:
cp initrd-2.6.29 /boot
cp linux-2.6.29/arch/x86/boot/bzImage /boot/vmlinuz-2.6.29
(九)修改/etc/grub.conf或者/etc/lilo.conf
为了让grub在启动时能提供一项我们自己制作的linux内核的选项,需要修改grub的配置文件/etc/grub.conf。(添加的代码为title My Linux(2.6.29)以下的)
注意:/etc/grub.conf实际上是/boot/grub/grub.conf的一个链接,因此真正的配置文件存在与/boot/grub目录下。
⑤ 拿到了linux的内核 应该用什么软件 怎么去编译
1、你可以把linux内核代码放到你的ubuntu或redhat之类的具有linux内核的操作系统里面,然后在你指定的目录里面解压你的内核源码;
2、在主目录里面找到Makefile文件,修改里面的“ARCH = ”和“CROSS_COMPILE”,也就是你的编辑器路径,保存退出;
3、输入make menuconfig配置你的内核参数,保存退出;
4、执行make zImage,你会看见屏幕哗啦哗啦的在运行,这是在生成内核zImage文件;
5、进入你的arch/(cpu型号)/root/里面,你会看到zImage文件,这个就是你要的。
以上是最简单的步骤,若想详细了解,在网络里面搜索“linux内核编译”,会得到一大堆结果,记得一般只看文库或者博客里面的文章,因为质量比较好。
若需帮助,请追问!
⑥ Linux内核源码如何编译
首先uname
-r看一下你当前的linux内核版本
1、linux的源码是在/usr/src这个目录下,此目录有你电脑上各个版本的linux内核源代码,用uname
-r命令可以查看你当前使用的是哪套内核,你把你下载的内核源码也保存到这个目录之下。
2、配置内核
make
menuconfig,根据你的需要来进行选择,设置完保存之后会在当前目录下生成.config配置文件,以后的编译会根据这个来有选择的编译。
3、编译,依次执行make、make
bzImage、make
moles、make
moles
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内核版本。是不是你刚下的那个呢!有没有成就感?
打字不易,如满意,望采纳。
⑦ Linux内核源码如何编译简单告诉我过程
1.先选定配置。如:编译ARM架构的内核:可在arch/arm/configs下可以找到对应的配置文件。
2.切换到内核根目录,运行:make xxx_defconfig,xxx_defconfig即为你选定的内核配置。
3.编译:运行make,编译无错误后,可在arch/arm/boot/下找到相应的内核镜像。
⑧ 安装了一台Linux服务器,想自己编译内核,一步一步做下来,
一般情况下
initrd这个文件在台式机上不是必须的,但是在有SCSI设备的服务器上却是必须的。有可能因为编译内核的时候没有产生initrd那个文件,所以会有上面的错误提示。用户可以使用mkinitrd命令来生成一个initrd.img文件,然后加入GRUB,重启试一试更多内容请查看《Linux就该这么学》。
⑨ 怎么重新编译linux服务器内核
make
config首先配置内核,生成内核配置文件,如果是服务器上的,建议使用编辑好的内核配置文件,自己在服务器上配置比较麻烦;
make再根据生成的配置文件进行编译;
找到新的内核就可以使用
⑩ 如何编译安装Linux内核
1.先解压解压后会看到源代码的目录linux-2.6.27.69(这个版本要与当前系统的版本一样查看当系统版本uname-r只要版本号前的数字相同就可以了如2.6.27)2.进入目录linux-2.6.27.69运行命令makedistclean3.将/boot下面的内核配置文件复制到linux-2.6.27.69下,并命名为.config4.运行命令makemenuconfig(注意操作的时候都要进入linux内核源代码目录linux-2.6.27.59)5.运行makebzImage编译完后会在arch/x86/boot/下面产生一个bzImage内核文件6.makemoles编译内核模块7.makemoles_install安装内核模块(安装完后会在/lib/moles下面产生个文件2.6.27.59)8.制作ramddistk文件系统mkinitrdinitrd-2.6.27.59.img2.6.27.599安装内核cparch/x86/boot/bzImage/boot/vmlinuz-2.6.27.59cpinitrd-2.6.27.59.img/boot/10.修改/etc/grub.conf这个对着配制修改就可以了,但要指定相应内核文件与ramdisk文件修改后真接reboot一下,会出现启动菜单项,选择要启动的内核,就可以了整个编译安装的过程就完成了需要注意是:运行makemenucofig的时候可能会出现问题这是由于需安些一些依赖包ncurses-devel在制作ramdisk的时候可能出现错误,提示nomolefound之类的提示这个时候要指定参数mkinitrd--builtin=ata_piix整个的编译安装过程就是这样,这个编译与安装只是针对x86,至于arm编译的时候也是类似就不多说了,在整个编译与安装可能出现的错误就两个,也说的很清楚了