QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2569|回复: 7

新内核之路是崎岖的,我要平静[大功告成]

[复制链接]
发表于 2009-12-27 20:41:13 | 显示全部楼层 |阅读模式
真是考验耐心啊
双核 2.53  6M二级缓存的机子,编译一个内核要等一小时,真受不了,都数不清这是第几次编译了。。。。。。
努力奋斗,已经看到成功的希望了,已经可以启动系统了,只是需要再纠正一下不正确的驱动!!!!!!

但愿这两天可以有时间做完,做完后,俺的 Slax 就升级新内核啦!!!

Linux kernel 2.6.32.2 版!!!

哈哈哈哈哈

一个人调试好无聊,有没有同好一起研究呢?!
我愿意公开给大家我的一点流程笔记和相关的内核工具及补丁。呵呵

[ 本帖最后由 applewolf 于 2010-1-5 23:41 编辑 ]
发表于 2009-12-27 23:23:32 | 显示全部楼层
只能口头支持了 呵呵
回复

使用道具 举报

 楼主| 发表于 2009-12-28 00:47:20 | 显示全部楼层
原帖由 npcomet 于 2009-12-27 23:23 发表
只能口头支持了 呵呵


公社服务器管理员?!
回复

使用道具 举报

 楼主| 发表于 2009-12-28 01:08:16 | 显示全部楼层
主要是加驱动!
看看是哪个驱动在影响   loop 值和 live 脚本显示不能 mount root 到 / 的,真奇怪,即然 root 不能 mount 到 / 我还能正常进 kde,就是出现一个非常诡异的现象,lzm 模块不能超过八个,第九个开始就不能解包用了,查了一下系统,发现 loop 被限制在了 0-7 ,不能超过 8 用 losetup 查询,发现 0-7 刚好是能正常加载的包在用,mknod 能创建 loop 设备,但是创建的设备不让用,怪啊。

试着在  cfg 文件中加了内核参数  max_loop = 128 结果,不用创建,loop设备自动生成了,而且可以用,但是,就是不给加载 第九个以后的 lzm 包。

用了三种方法生成  initrd.gz 这个文件,均告失败。

郁闷,找了半天的 古狗,终于看到有人提同样问题了,看一下回答,竟然是无果,不过那个提问的人的  .config 文件中 Block 的 loop 设置居然和我一样,是 y ,但是我看了 live 脚本,似乎是要求改成 m ,这不改还好,用本来一切正常的 .config 重配了一下 block loop 为 m 居然就无法编译通过了,一直就不是这样的问题,就是那样的问题,晕啊,连显卡都影响吗?!居然就这一个变动,连显卡都会编译出错,同样的环竟,同样的源码,同样的操作,就是一个 y 变成了 m,就这种结果了。

换一个版本系统重试,先扔掉   6.2.0 版,用 6.1.2 原版,本来还想偷懒,6.2.0 是全支持 586 模式,开好了PAE的,软件方面不用做大改动了,现在看来,得,还是先放下,找个源生版的  6.1.2 来试试。

继续努力中。。。。。。。。。。。

另外顺嘴提一句,RTL 8169 我编了六个版本的内核,居然这个网卡都不能正常编译,一直提示有错误,但非至命错误,真是奇怪了,手中没有这块卡,也不知被警告过的驱动能不能用 。
回复

使用道具 举报

 楼主| 发表于 2009-12-29 19:45:11 | 显示全部楼层
完全放弃了之前一份能正常启动,却只能开8个LOOP设备的内核,经过这两天研究下来,发现,其实这份内核编译得很失败,决定依笔记,再全新编译,这次不再在620和612两个平台间跳了,直接全新在612下进行, initool 需要更新了,已做好新的了.

这次研究发现 Tomas M 的 Linuxrc 中有点问题,他用的 busybox 也不全,缺少了 linuxrc 中的 usleep , 我先尝试一下把 initrd 中的 busybox 更新到最新正式版, 把 usleep 和 linuxrc 中指定,但是Tomas M的 Busybox 中缺少的命令补全.11 版太老了,改成官方最新的稳定版 14 版去.

然后研究一下 squashfs 4.0 ,把 linuxrc 和 liblinuxlive 两个脚本中的参数改成新版支持的参数,老参数已不适用于最新的 squashfs 4.0 了.内核都是新的补丁了,不能再用老补丁了........

唉................看来元旦是用不上了...............还有很长的路啊..........
回复

使用道具 举报

 楼主| 发表于 2009-12-29 19:48:03 | 显示全部楼层

不过这次研究还是有成果了,终于明白如何手动 step by step 生成 initrd.gz 这个文件了,特别是那个非常有趣的内核DEP文件,可以把完整的内核任意缩减成自己的定制版.
回复

使用道具 举报

 楼主| 发表于 2010-1-5 23:41:03 | 显示全部楼层


今天终于功成!!!!
成功升级2.6.32.2版内核,而且升级了squashfs到4.0
借鉴了官网上的文章,借用了 zen kernel 的第四版 patch, 在 Slax 6.1.2 版上成功升级了内核。
现在头痛的就是搞显卡驱动了
第一次成功,有点心黑,把 framebuffer 大量加入编译,结果发现,启动画面很不爽,字体时大时小,又重编译两次,总算搞定这个问题,把多余的 framebuffer 全去掉了,只保留了 Slax 6 官方版所保留的两个选项,现在正常了。

老的显卡驱动和老的模块都可以用,不过要转一下新版的 lzma 格式。

官论上成功的前辈们采用了在启动参数上加 max_loop 来解决只有 8 个 loop 设备的问题,我觉得不爽,所以,在 patch 前,修改了 patch 的文件,直接开了 256 个 loop 设备,这样,下次再手动加载 loop 设备时,就再也不用先 mknod 了,够用喽。

在这次升级内核中发现,其实 slax 把所有的 lzm 包当做是一个 loop 设备来加载,很不幸,我前前后后有90多个包,所以,直接开了 256 也算是解决 loop 设备的问题了。

只是在 linuxrc 中指定的 busybox 命令 usleep 到现在都没搞明白,为什么明明在脚本中有这条命令,但是官方版 initrd 却并不调用它,而如果自己用 linux-live 脚本生成 initrd 的话,却又一定要调用,不幸的是,官方版 initrd 文件里所带的 busybox 并没有把 usleep 编译进去,也就是说,并不存在这条命令。很奇怪啊,自己重编译升级 busybox 后,会多出很多 linux-live 中并未使用,但却在启动时会调用的命令,官方版为何没这些命令却又正常工作呢? 看来 Tomas M 做了手脚了。。。。。。。

目前系统一切正常,接下来就是重新调试显卡驱动了。

我其实比较心黑,想着这是 Live 系统,有可能在非常多平台上运行,并且遇到非常多不同的硬件,所以,最后一次编译,我几乎编译了所有的驱动程序,还把虚拟机支持直接编译进了内核,这次吸取了上次成功后遇到无线网卡不能开启的问题的教训,所以,在重做 core.lzm 时,我学乖了,直接吧 firmware 支持文件拷到 firmware 目录中了,反正拷了我所能找到的所有对应 firmware,这下爽了,都直接可以用了。

另外,这次特地在内核编译中加入了 ThinkPad  ACPI 和 ThinkPad SL 系列的支持,哈哈哈,我就是用 ThinkPad 的嘛,好消息是,我加入了非常多笔记本电脑的支持包括 HP , sony, compaq, dell, acer, toshiba 等等等等。

不过这次给内核打补丁时,我特地略过了 boot splash 的支持,我觉得它对 framebuffer 要求太高,而我又特地裁掉了很多 framebuffer 支持,所以,特地略过它了。

通过 lsmod, lspci,lsusb,dmesg 来查看所有信息,一切正常,驱动都升级喽!!!

这次注意了一下被警告过的设备驱动,经过试验,被警告过的驱动可以正常工作,估计只是被警告略过了一些比较特殊的功能,并不影响驱动正常工作。这是个好消息。
  1. root@slax:~# uname -a
  2. Linux slax 2.6.32.2 #3 ZEN SMP Tue Jan 5 21:59:48 GMT 2010 i686 Intel(R) Core(TM)2 Duo CPU     T9400  @ 2.53GHz GenuineIntel GNU/Linux
复制代码
  1. root@slax:~# lspci
  2. 00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
  3. 00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
  4. 00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
  5. 00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)
  6. 00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)
  7. 00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)
  8. 00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)
  9. 00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)
  10. 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
  11. 00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)
  12. 00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)
  13. 00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)
  14. 00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
  15. 00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
  16. 00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
  17. 00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
  18. 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)
  19. 00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)
  20. 00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)
  21. 00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)
  22. 03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection
复制代码
  1. root@slax:~# lsusb
  2. Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
  3. Bus 006 Device 002: ID 046d:c049 Logitech, Inc. G5 Laser Mouse
  4. Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
  5. Bus 001 Device 002: ID 0951:1603 Kingston Technology Data Traveler 1GB/2GB Pen Drive
  6. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  7. Bus 002 Device 003: ID 152d:2338 JMicron Technology Corp. / JMicron USA Technology Corp. JM20337 Hi-Speed USB to SATA & PATA Combo Bridge
  8. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  9. Bus 004 Device 002: ID 0a5c:2145 Broadcom Corp.
  10. Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
  11. Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
  12. Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
  13. Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
复制代码
另外庆贺一下,我开了这个内核的PAE,支持64G内存了!!

[ 本帖最后由 applewolf 于 2010-1-5 23:59 编辑 ]
回复

使用道具 举报

发表于 2010-1-6 13:37:17 | 显示全部楼层
请问,如何将老版本的内核升级为新内核?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-18 18:38 , Processed in 0.061832 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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