make 时加参数 -jX
X 是你的 CPU 核心数量 +1 。
可以加快你的编译速度。
我的本本 T5450 编译需要 10 分钟。我的内核是针对机器剪裁了的。不剪裁的全功能内核貌似我就需要 30 分钟了。
⑵ 大家编译一个x86的Linux内核需要多长时间
make
时加参数
-jX
X
是你的
CPU
核心数量
+1
。
可以加快你的编译速度。
我的本本
T5450
编译需要
10
分钟。我的内核是针对机器剪裁了的。不剪裁的全功能内核貌似我就需要
30
分钟了。
⑶ 编译linux内核要多久 / 蓝讯
根据我当时编译、链接一个完整的 Linux 操作系统的内核的时间还是比较长的。尤其是你并不能够保证在整个的编译、链接一个完整的 Linux 操作系统内核过程中,一点儿错误都没有,在此过程中有可能出现各种各样的错误,这才是最、最烦人的事情,也是导致编译内核时间延长的最根本原因。所以说,如果非要说出一个数量级的话,我那会儿编译内核是在小时数量级上的(当然了,我那会儿使用的机器硬件配置也远远没有现在的配置这么高)。
⑷ linux 内核怎么打印系统时间戳
在编译Linux内核,配置时:make menuconfig ---> Kernel hacking --> show timing information on printks
当选中这个选项后,启动内核,会在日志信息前面加上时间戳。
从下面的输出可以看出,时间精确到微秒(us)。
如下:
-------------------------------------------------------------------------------------------
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Linux version 2.6.35.7+ (bshen@bamboo) (gcc version 4.4.1 (Sourcery G++ Lite 2010q1-202) ) #109 PREEMPT Mon Nov 14 15:11:15 CST 2011
[ 0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache
--------------------------------------------------------------------------------------------
⑸ 如何重新编译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内核源码如何编译
首先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内核的编译过程
编译及安装简要步骤:
编辑Makefile版本信息
定义内核特性,生成配置文件.config,用于编译:make xconfig
编译内核:make
安装内核:make install
安装模块:make moles_install
具体步骤如下:
内核配置
先定义内核需要什么特性,并进行配置。内核构建系统(The kernel build system)远不是简单用来构建整个内核和模块,想了解更多的高级内核构建选项,你可以查看 Documentation/kbuild 目录内的内核文档。
可用的配置命令和方式:
make menuconfig
命令:make menuconfig
编译内核
编译和安装内核
编译步骤:
$ cd /usr/src/linux2.6
$ make
安装步骤 (logged as
$ make install
$ make moles_install
提升编译速度
多花一些时间在内核配置上,并且只编译那些你硬件需要的模块。这样可以把编译时间缩短为原来的1/30,并且节省数百MB的空间。另外,你还可以并行编译多个文件:
$ make -j <number>
make 可以并行执行多个目标(target)(KEMIN:前提是目标规则间没有交叉依赖项,这个怎么做到的?)
$ make -j 4
即便是在单处理器的工作站上也会很快,读写文件的时间被节省下来了。多线程让CPU保持忙碌。
number大于4不见得有效了,因为上下文切换过多反而降低的工作的速度。
make -j <4*number_of_processors>
内核编译tips
查看完整的 (gcc, ld)命令行: $ make V=1
清理所有的生成文件 (to create patches...): $ make mrproper
部分编译:$ make M=drivers/usb/serial
单独模块编译:$ make drivers/usb/serial/visor.ko
最终生成的文件
vmlinux 原始内核镜像,非压缩的
arch/<arch>/boot/zImage zlib压缩的内核镜像(Default image on arm)
arch/<arch>/boot/bzImage bzip2压缩的内核镜像。通常很小,足够放入一张软盘(Default image on i386)
⑻ Linux 2.6.34内核编译
Linux-2.6.34内核编译指南
2010-06-11 22:45 作者:玮琦 页面排版:玮琦
对linux内核的编译来说是每个编译者都必须掌握的一个阶段,但是编译内核是有相对一些难度的,也许你可能不知如何着手,请不必为此烦恼或者放弃,经过一些归纳和总结我编写了比较详细的步骤,从而可以为广大的爱好者以及新手能带来更好的帮助和深入的了解
一、下载内核
到www.kernel.org 下载新内核到 /usr/src
下载建议最好下载比当前已安装版本高的内核我下载的是 linux-2.6.34.tar.bz2( 原来的内核是 2.6.18-128.e15-i686)
★ 我察看当前内核的版本
[root@localhost~]#uname -a
Linux localhost.localdomain 2.6.18-128.e15-i686 #1 SMP Tue Jun 8 10:30:55 CST 2010 i686 i686 i386 GNU/Linux
然后将其解压到/usr/src目录下,使用下面的命令解压得到linux-2.6.34:
[root@localhost~]#tar -jxvf linux-2.6.34.tar.bz2
[root@localhost~]#bzip2 -d linux-2.6.34.tar.bz2
如果所下载的是.tar.gz(.tgz)文件,请使用下面的命令:
[root@localhost~]#tar -zxvf linux-2.6.34.tar.gz
为了不把原来的目录覆盖掉所以呢在当前路径下做一个链接为linux:
[root@localhost~]#ln -s /usr/src/linux-2.6.34 /usr/src/linux
二、配置内核
[root@localhost~]#make clean 清除原有不需要的模块和文件(垃息)
[root@localhost~]#make mrproper 清理源代码数
[root@localhost~]#make menuconfig 基于ncurse的图形配置界面,可以在文本下以菜单方式,进行配置。
Load an Alternate Configuration File,导入.config文件
注:内核配置有两种方法,一种是直接置入内核* ;另一种是编成模块M ;两种方法各有优点;直接编入内核的,比如设备的启动,不再需要加载模块的这一过程了;而编译成模块,则需要加载设备的内核支持的模块;但直接把所有的东西都编入内核也不是可行的,内核体积会变大,系统负载也会过重。我们编内核时最好把极为重要的编入内核;其它的如果您不明白的,最好用默认.
移动键盘上下左右键,按Enter 进入一个目录。把指针移动到Exit就退出当前目录到上级目录;
下面图形界面蓝色区域为选择区:
General setup -→
[*] Enable loadable mole support --->
-*- Enable the block layer -→
Processor type and features --->
Power management and ACPI options --->
Bus options (PCI etc.) --->
Executable file formats / Emulations --->
-*- Networking support --->
Device Drivers -→
Firmware Drivers --->
File systems --->
Kernel hacking -→
Security options --->
-*- Cryptographic API -→
[*] Virtualization -→
Library routines --->
---
Load an Alternate Configuration File
Save an Alternate Configuration File
<Select> < Exit > < Help >
修改完毕选择Save an Alternate Configuration File,然后退出配置
[root@localhost~]#cp ../kernels/2.6.18-128.e15-i686/.config /usr/src
★ 编辑配置文件.config
[root@localhost~]#vim .config
找到105行的"#CONFIG_SYSFS_DEPRECATED is not set"改为"CONFIG_SYSFS_DEPRECATED=y" 保存
假如不修改该行,在升级重新启动后会报如下的错,导致启动失败
Volume group "VolGroup00" not found
Unalbe to access resume device (/dev/VolGroup00/LogVol00)
mount: could not find filesystem '/dev/root'
setuproot:moving /dev failed: No such file or directory
setuproot:error mounting /proc: No such file or directory
setuproot:error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic - not syncing:Attempted to kill init!
★ 编译开始,大概需要半个小时到一个小时的时间自己可以倒杯凉茶耐心候。
[root@localhost~]#make
★ 编译外挂模块和需要加载的模块安装
[root@localhost~]#make moles && make moles_install
这时候会出现3个警告[2]
WARNING: No mole dm-mem-cache found for kernel 2.6.34, continuing anyway
WARNING: No mole dm-message found for kernel 2.6.34, continuing anyway
WARNING: No mole dm-raid45 found for kernel 2.6.34, continuing anyway
经过测试,这3个警告不会影响内核的升级
★ 编译系统内核且生成新的内核文件
[root@localhost~]#make bzImage
[root@localhost~]#cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.34
[root@localhost~]#mkinitrd /boot/initrd-2.6.34.img 2.6.34
[root@localhost~]# cp /boot/initrd-2.6.34.img /tmp
[root@localhost~]#cd /tmp/
[root@localhost~]#ls
[root@localhost~]#initrd-2.6.34.img
[root@localhost~]#mkdir newinitrd
[root@localhost~]# cd newinitrd/
[root@localhost~]# zcat ../initrd-2.6.34.img |cpio -i
[root@localhost~]# ls
bin dev etc init lib proc sbin sys sysroot
[root@localhost~]#vim init
★ 删掉重复的两行,有些情况下是没有就不要执行
echo "Loading dm-region-hash.ko mole"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko mole"
insmod /lib/dm-region-hash.ko
★ 重新打包initrd
[root@localhost~]# find .|cpio -c -o > ../initrd
[root@localhost~]# cd ..
[root@localhost~]# gzip -9 < initrd > initrd-2.6.34.img
★ 将initrd重新复制到/boot目录下
[root@localhost~]#cp initrd-2.6.34.img /boot
★ 给 /boot/grub/grub.conf中添加一个新的启动项,
[root@localhost~]#vim /boot/grup/grup.conf
如我的 grub.conf 增加了
如下一段文字
title Red Hat(2.6.34)
root (hd0,5)
kernel /boot/vmlinuz-2.6.34 ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.34.img
三、重新起动
[root@localhost~]# reboot
★ 启动成功后查看当前内核版本号
[root@localhost~]#uname -r
2.6.34
四、待解决的问题
★ Iptables启动失败
操作系统启动过程中出现下面的错误信息:
Applying ip6tables firewall rules: ip6tables-restore v1.3.5: ip6tables-restore:unable to initalizetable 'filter'
Error accurred at line: 3
Try "ip6tables-restore -h' or 'ip6tables-restore --help' for more information.
Applying iptables firewall rules: iptables-restore v1.3.5: iptables-restore:unable to initalizetable 'filter'
Error accurred at line: 3
Try "iptables-restore -h' or 'iptables-restore --help' for more information.
启动后尝试手动启动防火墙:
[root@localhost~]#service iptables status
防火墙已停
[root@localhost~]#service iptables start
正在卸载 Iiptables 模块:[确定]
应用 iptables 防火墙规则:iptables-restore v1.3.5: iptables-restore: unable to initializetable 'filter'
Error occurred at line: 3
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
[失败]
★ Hidd(Bluetooth HID daemon)启动失败
Starting hidd: Can't open HIDP control socket: Address family not supported by protocol [FAILED]
[root@localhost~]# service hidd status
hidd 已死,但是 subsys 被锁
[root@localhost~]# service hidd start
正在启动 hidd:Can't open HIDP control socket: Address family not supported by protocol