设为首页 收藏本站
查看: 1034|回复: 0

[经验分享] 如何编译git内核为Arch标准样式--Compile linux git tree as Arch way

[复制链接]

尚未签到

发表于 2018-9-19 06:29:21 | 显示全部楼层 |阅读模式
为啥需要如此呢?  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的PKGBUILD
  yaourt -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-build
  cp ../config.i686 ./.config   或者 cp ../config.x86_64 ./.config
  make prepare
  make 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 setup
  Arrow keys navigate the menu.   selects submenus --->.  Highlighted
  letters are hotkeys.  Pressing  includes,  excludes,  modularizes
  │  features.  Press  to exit,  for Help,  for Search.
  │  Legend:
  • built-in  [ ] excluded   module  < > module capable
      ───────────────────────────────────────
      │ │   
  • Prompt for development and/or incomplete code/drivers

      │ │    ()  Local version - append to kernel>  │ │   
  • 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' Makefile
      sed -i 's|.*CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION="-ARCH"|g' .config
      sed -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就可以了。。。


  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-593819-1-1.html 上篇帖子: 使用Git替代SVN的可行性分析 下篇帖子: Git学习教程(二):配置和初始化
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表