Linux内核源码如何编译
发布网友
发布时间:2022-04-19 13:59
我来回答
共4个回答
热心网友
时间:2022-04-18 22:37
首先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内核版本。是不是你刚下的那个呢!有没有成就感?
打字不易,如满意,望采纳。
热心网友
时间:2022-04-18 23:55
1、大概步骤:
1、安装开发包组
2、下载源码文件
3、.config:准备文本配置文件
4、make
menuconfig:配置内核选项
5、make
[-j
#]
6、make
moles_install:安装模块
7、make
install
:安装内核相关文件
安装bzImage为/boot/vmlinuz-VERSION-RELEASE
(去boot目录下查看)
生成initramfs文件
8、编辑grub的配置文件
2、编译配置选项
配置内核选项
支持“更新”模式进行配置:
make
help
(a)
make
config:基于命令行以遍历的方式去配置内核中可配置的每个选项
(b)
make
menuconfig:基于curses的文本窗口界面
(c)
make
gconfig:基于GTK
(GNOME)环境窗口界面
(d)
make
xconfig:基于QT(KDE)环境的窗口界面
支持“全新配置”模式进行配置
(a)
make
defconfig:基于内核为目标平台提供的“默认”配置进行配置
(b)
make
allyesconfig:
所有选项均回答为“yes“
(c)
make
allnoconfig:
所有选项均回答为"no“
3、编译
全编译:make
[-j
#]
编译内核的一部分功能:
a)
只编译某子目录中的相关代码:
#
cd
/usr/src/linux
#
make
dir/
(b)
只编译一个特定的模块:
#
cd
/usr/src/linux
#
make
dir/file.ko
例如:只为e1000编译驱动:
#make
drivers/net/ethernet/intel/e1000/e1000.ko
4、编译内核
如何交叉编译内核:
编译的目标平台与当前平台不相同;
#
make
ARCH=arch_name
要获取特定目标平台的使用帮助
#
make
ARCH=arch_name
help
#
make
ARCH=arm
help
5、清理删除
在已经执行过编译操作的内核源码树做重新编译:
需要事先清理操作:
#
make
clean:清理大多数编译生成的文件,但会保留config文件等
#
make
mrproper:
清理所有编译生成的文件、
config及某些备份文件
#
make
distclean:
mrproper、
patches以及编辑器备份文件
卸载内核
删除/lib/moles/目录下不需要的内核库文件
删除/usr/src/linux/目录下不需要的内核源码
删除/boot目录下启动的内核和内核映像文件
更改grub的配置文件,删除不需要的内核启动列表
需要解决更多linux问题,详情请看
http://www.linuxprobe.com/chapter-00.html
望采纳
热心网友
时间:2022-04-19 01:30
编译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!
热心网友
时间:2022-04-19 03:21
你想编译你最起码得懂吧,懂的话编译软件网上多的是,你可以查一下