配置并编译内核[更新到linux-2.6.34][增加自动精简]

内核编译和嵌入式产品的设计与开发
回复
头像
gdgglhy
帖子: 440
注册时间: 2010-04-23 12:19
系统: arch
送出感谢: 6 次
接收感谢: 8 次

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#511

帖子 gdgglhy » 2010-06-13 23:09

mark
头像
adsl
帖子: 61
注册时间: 2010-04-05 16:43
来自: 山东临沂
送出感谢: 0
接收感谢: 0
联系:

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#512

帖子 adsl » 2010-06-15 11:21

留个脚印,以后可能用得着
http://shop100148913.taobao.com/ 欢迎光临偶滴小店
evan0723
帖子: 33
注册时间: 2010-05-12 13:09
送出感谢: 0
接收感谢: 0

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#513

帖子 evan0723 » 2010-06-19 11:09

MARK MARK,对于菜鸟,还是有很多准备工作需要做
头像
task
帖子: 133
注册时间: 2010-03-02 22:10
送出感谢: 0
接收感谢: 0

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#514

帖子 task » 2010-06-27 14:30

很好的帖子mark一下,随时来查看。
头像
zhuangxiaomeng
帖子: 456
注册时间: 2010-03-15 14:14
系统: Win10 + Ubuntu
送出感谢: 0
接收感谢: 0
联系:

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#515

帖子 zhuangxiaomeng » 2010-06-29 21:12

出现如下错误

代码: 全选

HOSTCC  scripts/basic/fixdep
/bin/sh: scripts/basic/fixdep: Permission denied
make[1]: *** [scripts/basic/fixdep] 错误 126
make: *** [scripts_basic] 错误 2
头像
syrano
帖子: 4313
注册时间: 2007-10-06 18:40
送出感谢: 0
接收感谢: 5 次

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#516

帖子 syrano » 2010-06-29 21:56

zhuangxiaomeng 写了:出现如下错误

代码: 全选

HOSTCC  scripts/basic/fixdep
/bin/sh: scripts/basic/fixdep: Permission denied
make[1]: *** [scripts/basic/fixdep] 错误 126
make: *** [scripts_basic] 错误 2
权限不够.

在命令前加sudo
E=m c^2
佛山无影脚
帖子: 73
注册时间: 2010-04-24 22:11
送出感谢: 0
接收感谢: 0

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#517

帖子 佛山无影脚 » 2010-07-04 22:51

2、在“ Timer frequency ”里,默认是250Hz,最好选择1000Hz以提高gui响应

请问这个在哪里选? 我用了make menuconfig 和 xconfig都没有找到这个选项
frankvista
帖子: 177
注册时间: 2010-06-16 20:55
送出感谢: 0
接收感谢: 1 次

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#519

帖子 frankvista » 2010-08-06 18:04

请教LZ,为何我用make localmodconfig为何编译出来的内核比Ubuntu的还大?

make localmodconfig之后我一路回车,然后用xconfig加了几个像NTFS,vFAT等等的支持,同时也删除了几个,竟然得到如下结果:

代码: 全选

ls -l | grep "vmlinuz-2.6"
-rw-r--r-- 1 root root 4029792 2010-04-16 21:01 vmlinuz-2.6.32-21-generic
-rw-r--r-- 1 root root 4030048 2010-06-04 09:56 vmlinuz-2.6.32-22-generic
-rw-r--r-- 1 root root 4031552 2010-06-11 20:53 vmlinuz-2.6.32-23-generic
-rw-r--r-- 1 root root 4033472 2010-07-05 22:19 vmlinuz-2.6.32-24-generic
-rw-r--r-- 1 root root 4982048 2010-08-06 17:34 vmlinuz-2.6.35samsungx06
frankvista
帖子: 177
注册时间: 2010-06-16 20:55
送出感谢: 0
接收感谢: 1 次

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#520

帖子 frankvista » 2010-08-08 15:07

请问,如果我什么东西忘记编译进入内核了。

我不想自己去自己xconfig,能否使用localmodconfig产生一个新的config文件和原来文件进行合并?
trsc
帖子: 1
注册时间: 2010-08-09 10:42
送出感谢: 0
接收感谢: 0

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#521

帖子 trsc » 2010-08-09 11:05

syrano 写了:参考weblog.php?w=482写成

从linux-2.6.32开始可以使用make localmodconfig自动精简内核, 菜鸟也能轻松精简内核到十几MB
如果想手动精简看3楼
:em06

最新NV驱动才能在2.6.34及其以后的内核上使用
ATI官方(受限)显卡驱动无法在最新内核上运行

一、下载源代码和编译软件准备
下载内核源代码:http://www.kernel.org/
注意,点击2.6.34内核的Full source版,即完整版。
如果你懒得去网站点链接,运行下列命令:

代码: 全选

cd ~/ 
wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.tar.bz2
安装有关编译程序。安装make ,gcc, make-kpkg,运行xconfig等等和编译内核相关的工具。安装不了,请检查/etc/apt/sources.list 文件。
有关命令:

代码: 全选

sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot
二、解压源代码并打上补丁
注意,很多教程上说应该解压到 /usr/src, 但是实际上解压到任何目录上都可以。
/usr/src下面需要root权限反而容易出问题.

代码: 全选

tar jfx linux-2.6.34.tar.bz2 -C ~/linus
你要把'~/linus'改成你自己解压linux-2.6.34.tar.bz2的目录,
注意目录容量要到达1.5G

现在,源代码就在 ~/linus/linux-2.6.34/
进入源代码的目录,准备下一步的工作。后面都在这个目录里面进行。

代码: 全选

cd ~/linus/linux-2.6.34/
升级内核可以参考下面的附件(这项暂时没用, 不用看)
.pdf
三、开始编译前的准备工作。
首先,清理以前编译时留下的临时文件,如果是刚刚解开的包,据我的实践,不需要执行这步。执行与否,自己考虑。
相关命令如下:

代码: 全选

make mrproper
很多教程上说把现在使用的内核的config拷贝过来参考,据我的实践,也不需要,ubuntu还有debian会自动做这步。
不过ubntu的config存在很多问题, 建议改用附件中arch的2.6.23的config
kernel26-config.tar.xz
里面的config是32位的config, 里面的config.x86_64是64位的config
把kernel26-config.tar.xz里的解压出来, 然后把config和config.x86_64复制到源代码目录, 然后如果你是32位系统
命令如下:

代码: 全选

cp config ./.config 
如果你是64位系统

代码: 全选

cp config.x86_64 ./.config

四、开始配置内核选项。
从linux-2.6.32开始可以使用make localmodconfig自动精简内核, 菜鸟也能轻松精简内核到十几MB

首先自动精简内核模块(如果想手动精简看3楼)[/size]
注意: 该方法会自动去掉一些从开机到当前没用使用的模块(主要是驱动模块),
所以你可以使用一下你的摄像头, 挂载一下iso文件.....
以保证需要的模块不会被精简掉, 否则使用新内核时会发现不能挂载iso文件, 不能使用某些外设等等.
命令如下:

代码: 全选

make localmodconfig
然后就可以直接跳到后面的第五段进行编译了.

也可以再使用qconfig检查一下
相关命令

代码: 全选

sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers  libqt3-mt#安装xconfig依赖包,
make xconfig
上面这个qconfig是qt3的, 如果要用qt4的看后面的附2.

选项意义:圆中点是编译成可以随时加人的模块(以下简称M),方块中一勾是编译进入内核(以下简称Y),空就是不要(简称N)。(如下图)
Screenshot-4.png
1、在“General setup”里面,有几项普通用户可以放心的去掉,
分别是:POSIX Message Queues 、Cpuset Support、Create deprecated sysfs files、Kernel->user space relay support (formerly relayfs)
2、在“ Timer frequency ”里,默认是250Hz,最好选择1000Hz以提高gui响应
3、其他的具体看3楼

全部设置完成,请保存设置。按照我的习惯,先在上一层目录保存一个备份,文件名类似 ../config
然后保存到当起目录,文件名 .config
退出设置程序。

五、开始编译内核。
ubuntu的工具是make-kpkg,和其他的发行版相比,步骤相对简单。
相关命令:

代码: 全选

sudo make-kpkg clean #这条命令好像不要超级权限,很多资料上说要,不过这不是原则问题。
fakeroot make-kpkg --initrd --append-to-version=gould0.76 kernel_image
上述命令中的gould0.76大家用自己喜欢的字符代替.
输完上述命令回车之前,建议大家把浏览器还有别的运用程序都关掉,机器开始的工作比较艰苦。我的p4 1.7G机器用了30分钟。

六、安装内核
编译完成就是安装工作。编译好的内核在上一层目录。我的是linux-image-2.6.34gould0.76_2.6.34gould0.76-10.00.Custom_i386.deb

代码: 全选

cd..
sudo dpk -i linux-image-2.6.34gould0.76_2.6.34gould0.76-10.00.Custom_i386.deb
文件名很长,如果不用tab自动补足是不可能的,tab键万岁。
安装完成后和老内核比较一下大小

代码: 全选

 ls -l /boot/ 
注意:安装完后先不要动linux-2.6.34的目录,可能还要安装驱动
七、重新启动验证新内核。
sudo reboot

八、如果。。。
grub菜单上选用老内核启动机器,推倒重来

附1, 重启后N卡驱动安装
最新NV驱动才能在2.6.34内核上使用

让系统在内核升级时自动安装nvdia驱动的方法:viewtopic.php?t=141431&start=0&postdays ... highlight=
重启后不能直接进入X11,先编译nvidia驱动官方(先删除旧的驱动)

代码: 全选

sudo sh NV******.run
如果显示找不到内核源码用

代码: 全选

sudo sh NV******.run --kernel-source-path=你编译内核的目录,
如
sudo sh NV******.run --kernel-source-path=/home/david/linus/linux-2.6.34
具体安装方法见http://wiki.ubuntu.org.cn/Nvidia%E6%89%8B%E5%86%8C(看了wiki还解决不了N卡驱动楼下提问)

附2, 把qconfig改成qt4界面
下载下面的补丁
2900_xconfig-with-qt4.patch.tar.xz
解压到源码目录, 然后使用命令

代码: 全选

patch -p1 <  2900_xconfig-with-qt4.patch
如果之前编译过xconfig, 先用下面的命令清除编译残留.

代码: 全选

sudo make-kpkg clean
然后需要安全qt4编译环境, 不过我现在在arch下, 不清楚编译依赖, 应该就是qt4的dev包, ls有清楚的请补充.
安装好qt4编译环境后, 编译命令如下.

代码: 全选

make xconfig
Screenshot-Linux Kernel v2.6.34 Configuration-1.png
ATI官方(受限)显卡驱动不支持新内核

inter显卡和用开源驱动(没装受限驱动)打开特效的ati显卡编译内核后不需要安装驱动

drcom-1.4.8才支持linux-2.6.28以上内核
drcom-1.4.8.tar.gz
viewtopic.php?t=115048&start=15&postday ... highlight=
[/size]

补充1:如果编译内核后,只是希望修改某些模块(M)选项,可以不用完全重新编译。
只需要执行
make xconfig
然后之添加或减少模块(M)选项
然后(不要执行make mrproper和sudo make-kpkg clean),
直接执行编译命令如
sudo make-kpkg -initrd --initrd --append-to-version=david0.68 kernel_image #整条命令要和上次编译时一样
make就会在原来编译的基础上,编译新选上的模块(如果有的话),而不会全部重新编译。
这样可以节省大量时间和能源,尤其是你电脑不是很快的话。


欢迎大家提意见 :lol:


楼主你好,我在Ubuntu 10.04 下面编译2.6.34.2的内核,initrd 在make xconfig 的时候已经选择,使用:
make-kpkg -initrd --initrd --append-to-version=xxx kernel_image
但是编译安装之后发现对应的initrd.imgxxx并没有生成。 此时重启是不能启动成功的。提示
kernel panic -not syncing :VFS:Unable to mount root fs on Unknown-block(0,0)

还要跑到lib/module下面手动mkinitramfs -o
一下,然后复制到boot目录下,之后还要修改grup.conf文件设置一下initrd /boot/initrd.img-xxx
才能启动成功。



我想问一下,看了这么多帖子,貌似在Ubuntu下面这个initrd。img只要指定了--initrd会自动生成,且grub.cong文件也会添加相对应的项,但是我的为什么不行呢?是不是还有别的什么需要配置?

我只是在默认配置上面删掉了kernel hacking 部分。

谢谢!
头像
bbeikke
帖子: 880
注册时间: 2008-10-14 21:54
送出感谢: 0
接收感谢: 2 次

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#522

帖子 bbeikke » 2010-08-15 15:17

楼主你好,我在Ubuntu 10.04 下面编译2.6.34.2的内核,initrd 在make xconfig 的时候已经选择,使用:
make-kpkg -initrd --initrd --append-to-version=xxx kernel_image
但是编译安装之后发现对应的initrd.imgxxx并没有生成。 此时重启是不能启动成功的。提示
kernel panic -not syncing :VFS:Unable to mount root fs on Unknown-block(0,0)

还要跑到lib/module下面手动mkinitramfs -o
一下,然后复制到boot目录下,之后还要修改grup.conf文件设置一下initrd /boot/initrd.img-xxx
才能启动成功。



我想问一下,看了这么多帖子,貌似在Ubuntu下面这个initrd。img只要指定了--initrd会自动生成,且grub.cong文件也会添加相对应的项,但是我的为什么不行呢?是不是还有别的什么需要配置?

我只是在默认配置上面删掉了kernel hacking 部分。

谢谢!

同样的问题,没有生成initrd /boot/initrd.img-xxx
http://www.mail-archive.com/debian-bugs ... 63053.html
上面的网址说这是一个bug :em06
地狱可以想象,天堂却无法描述。
头像
寒声碎
帖子: 1723
注册时间: 2009-07-31 16:50
送出感谢: 3 次
接收感谢: 4 次
联系:

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#523

帖子 寒声碎 » 2010-08-29 17:40

[email protected]:~/linux-2.6.35.4$ make localmodconfig
Makefile:312: /home/lvlingli/linux-2.6.35.4/scripts/Kbuild.include: 没有那个文件或目录
make: *** 空变量名。 停止。
make: *** [scripts_basic] 错误 2
[email protected]:~/linux-2.6.35.4$
楼主 这是什么原因尼 我都按照你的步骤来的啊~~ :em06
头像
寒声碎
帖子: 1723
注册时间: 2009-07-31 16:50
送出感谢: 3 次
接收感谢: 4 次
联系:

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#524

帖子 寒声碎 » 2010-08-29 19:49

原来是解压出错了 呵呵 我输入make localmodconfig 问我很多问题是怎么回事呢
头像
寒声碎
帖子: 1723
注册时间: 2009-07-31 16:50
送出感谢: 3 次
接收感谢: 4 次
联系:

Re: 配置并编译内核[更新到linux-2.6.34][增加自动精简]

#525

帖子 寒声碎 » 2010-08-29 20:21

第5步出错~~
[email protected]:~/windisks/winF/linux-2.6.35.4$ fakeroot make-kpkg --initrd --append-to-version=lvlingli kernel_image
exec make kpkg_version=12.032 -f /usr/share/kernel-package/ruleset/minimal.mk debian APPEND_TO_VERSION=lvlingli INITRD=YES
====== making target debian/stamp/conf/minimal_debian [new prereqs: ]======
This is kernel package version 12.032.
test -d debian || mkdir debian
test ! -e stamp-building || rm -f stamp-building
install -p -m 755 /usr/share/kernel-package/rules debian/rules
for file in ChangeLog Control Control.bin86 config templates.in rules; do \
cp -f /usr/share/kernel-package/$file ./debian/; \
done
for dir in Config docs examples ruleset scripts pkg po; do \
cp -af /usr/share/kernel-package/$dir ./debian/; \
done
cp: 无法创建目录 “./debian/Config”: 文件已存在
test -f debian/control || sed -e 's/=V/2.6.35.4lvlingli/g' \
-e 's/=D/2.6.35.4lvlingli-10.00.Custom/g' -e 's/=A/i386/g' \
-e 's/=SA//g' \
-e 's/=I//g' \
-e 's/=CV/2.6/g' \
-e 's/=M/Unknown Kernel Package Maintainer <[email protected]>/g' \
-e 's/=ST/linux/g' -e 's/=B/i386/g' \
/usr/share/kernel-package/Control > debian/control
/bin/sh: cannot create debian/control: File exists
make: *** [debian/stamp/conf/minimal_debian] 错误 2
Failed to create a ./debian directory: 没有那个文件或目录 at /usr/bin/make-kpkg line 971.
回复

回到 “内核及嵌入式开发”