如何编译git内核为Arch标准样式–Compile linux git tree as Arc

为啥需要如此呢?1、以免部分内核模块在用git内核的时候全部需要重新编译,replace参数指定的软件是一定要重新编译的了;2、KISS,有了git内核,还要其他内核干啥,除非稳定性不够,再降级为稳定内核了。 用git内核的人要么是开发人员,要么是极度追新了。。。何为Arch way呢?1、etc下文件Arch way, 设置跟Arch官方abs里面的一样的.preset文件就可以了2、内核模块版本— 这是最关键的东西一般情况下,为不同内核版本编译的内核模块是不能混用的。之所以说一般情况下,就是因为我们有变通的办法,这就是Arch Way了!忽略小版本,2.6.30内核模块可以相互混用――不绝对。为2.6.31-rc6-git6编译的reiser4模块也可以用在2.6.31-rc8-git2上!――这样就可以将内核模块做成独立软件包, KISS原则,要的就装,免得什么都集成到内核程序包中。3、内核源码目录的Arch way, src目录名也用Arch标准的linux-2.6.31-ARCH …简言之,Arch way就是,所有小版本忽略,而用大版本 2.6.31-ARCH 这样的标示。如何Arch way?只讲git内核如何编译为Arch way了,其他版本稍作变通就可以了!1、获取kernel26-git的PKGBUILDyaourt -S kernel26-git这样kernel26-git的PKGBUILD等文件就会下载到/tmp/yaourt-tmp-用户名/aur-kernel26-git/文件夹下了复制到一个有足够空间的位置, 最少要3G的空间(最新的git tree就有677MB多了)。2、定制PKGBUILD如果按照默认的设置直接编译,版本就成了2.6.31_rc8_00015_gadda766_dirty 或者2.6.31-00038-g37d0892-dirty此类了,2.6.31是大版本,rc8是EXTRAVERSION――附加版本或者叫开发版本,这两个是在内核源码目录下的Makefile的前四行定义的,然后后面的三个是git版本,或者叫指纹了,存在于.git目录中。* 如何不花时间编译得到如上信息呢? a. git clone linux-2.6.git 内核到跟PKGBUILD一个目录下,免得损坏git tree, 为以后的git pull origin 来更新内核tree做准备了。 b. git clone linux-2.6.git src/linux-2.6.git-build 复制内核源码到src/linux-2.6.git-build下,在这个目录下操作,以免花时间pull的近700MB的文件损坏了。。。!c. cd src/linux-2.6.git-buildcp ../config.i686 ./.config 或者 cp ../config.x86_64 ./.configmake preparemake kernelrelease就得到上面提到的版本信息了。* 如何改变这种版本为Arch Way呢?首先树立目标―― 目标版本应该是 2.6.31-ARCH, 这样Arch官方编译的关于内核模块的包也可以为你所用了!――虽然暂时还没有, 今天Arch官方还是最新的稳定内核 2.6.30.5。如果改变呢? 2.6.31是需要保留的,rc8是需要去掉的――所以要改Makefile的第四行,改为“EXTRAVERSION =” 。然后后面的三个字段也是要去掉的,加上-ARCH,加-ARCH,很多人都知道了,在内核.config中将CONFIG_LOCALVERSION=””改为CONFIG_LOCALVERSION=”-ARCH”就可以了! 但要去掉那三个字段,就麻烦点了,不过还是有几种办法的:a. rm -rf .git 删除git版本信息库, 这个办法最损! 哈 不过是基于一闪过的分析――这三个字段存在于.git中,如何得知的? 哈, 那就要研究了!b. 还有个官方的开关! .config中CONFIG_LOCALVERSION_AUTO=y, 这个设置是linux先生默认的!不信?你可以删除.config 然后make menuconfig看看,在General setup中是如下默认设置:.config – Linux Kernel v2.6.31 Configuration───────────────────────────────────────General setupArrow keys navigate the menu. <Enter> selects submenus —>. Highlightedletters are hotkeys. Pressing <Y> includes, <N> excludes, <M> modularizes│ features. Press <Esc><Esc> to exit, <?> for Help, </> for Search. │ Legend: [*] built-in [ ] excluded <M> module < > module capable───────────────────────────────────────│ │ [*] Prompt for development and/or incomplete code/drivers │ │ () Local version – append to kernel release │ │ [*] Automatically append version information to the version string │ │ Kernel compression mode (LZMA) —> │ │ [*] Support for paging of anonymous memory (swap)将Automatically append version information to the version string前的*号去掉,也就是.config文件中CONFIG_LOCALVERSION_AUTO=y改成#CONFIG_LOCALVERSION_AUTO is not set两种办法,建议采用第二种了!文明点! 哈手动测试下上面改动是否得到你想要的结果, 用上面提到的不编译得到版本信息的办法了。。。更加智能点的办法就是改PKGBUILD了,加入下三行到 拷贝 config.* 到.config后:sed -i ‘s|^EXTRAVERSION = .*$|EXTRAVERSION =|g’ Makefilesed -i ‘s|.*CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=”-ARCH”|g’ .configsed -i ‘s|.*CONFIG_LOCALVERSION_AUTO.*|\# CONFIG_LOCALVERSION_AUTO is not set|g’ .config是不是很智能化呢! shell的魅力!以上三行加入到PKGBUILD后,就可以确保版本号 Arch way了!如果希望更彻底点,将kernel26-git.preset替换为Arch官方PKGBUILD包中的kernel26.preset,kernel26-git.install替换为Arch官方PKGBUILD包中的kernel26.install就可以了。 当然PKGBUILD文件要适当修改,替换文件名,同时md5sum 字段也需要删除,编译前makepkg -g>>PKGBUILD就可以更新md5sum字段了,然后再 time makepkg 2>&1 | tee ./log就可以了。。。

Archlive” 博客,转载请与作者联系!

想做你的有缘人,可是我知道结果是惨淡的,但还是心存希望!

如何编译git内核为Arch标准样式–Compile linux git tree as Arc

相关文章:

你感兴趣的文章:

标签云: