无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5050|回复: 11
打印 上一主题 下一主题

iThink Slax 6.3.1 构建之[一]内核编译笔记

[复制链接]
跳转到指定楼层
1#
发表于 2011-3-30 23:56:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
iThink Slax 6.3.1 构建之[一]内核编译笔记                                                                                                                                                         
本版 iThink Slax 6.3.1 按计划采用了 2.6.37.4 内核。

同时,参考了 slackware-current 2011-03-15 版本,保持与官方版本一至。

介绍一下这次我的开发平台就是 iThink Slax 6.3.0,由于630系统是首个与官方 Slax 分离的测试平台,所以,非常多不足之处,其中包括内核选项不合理,适成在 i 系列CPU上启动失败的BUG,还包括在不少平台上存在无法进入桌面的问题(应该是源自xorg 部份存在问题,并未分析出结果)等等,一堆BUG,所以,在这次制做 iThink Slax 6.3.1 版时,我决定公开整个制做过程,以便于大家一起研究改进。

好了,多的不说了,先贴笔记吧。

准备工作
首先,我到 kernel.org 中 git 了一份 2.6.37.4 的最新版本

  1. cd /tmp
  2. mkdir kernel
  3. cd kernel
  4. git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.37.y.git
复制代码

因为硬盘资源紧张,所以,下载完成后,我清理了一下下下来的源码。

  1. mv linux-2.6.37.y linux-2.6.37.4
  2. cd linux-2.6.37.4
  3. rm -rf .git
复制代码

然后我去下载了 aufs 和 squashfs+lzma 的补丁:

  1. cd /tmp
  2. mkdir patch
  3. cd patch
  4. wget http://www.ponce.cc/porteus/i486/current/packages/kernel-sources/porteus-v09-kernel-patches.zip
  5. mkdir porteus
  6. cd porteus
  7. unzip -x ../porteus-v09-kernel-patches.zip
复制代码

这个可是重点补丁,少了它,live 系统就 live 不起来了。

接下来,是准备为内核打 Framebuffer UTF-8 中文显示补丁,这个补丁分为两部份:
第一部份,是内核程序补丁

  1. cd /tmp
  2. cd patch
  3. wget http://zdbr.net.cn/download/utf8-kernel-2.6.37-core-1.patch.bz2
  4. bzip2 utf8-kernel-2.6.37-core-1.patch.bz2
复制代码

第二部份,是内核utf-8 字库

  1. wget http://zdbr.net.cn/download/utf8-kernel-2.6-fonts-3.patch.bz2
  2. bzip2 -d utf8-kernel-2.6-fonts-3.patch.bz2
复制代码

好了,现在准备工作 ready 了,可以开始正式工作了。。

给内核打补丁
多的不说,直接上命令吧:

  1. cd /tmp/kernel/linux-2.6.37.4
  2. patch -Np1 < /tmp/utf8-kernel-2.6.37-core-1.patch
  3. patch -Np1 < /tmp/utf8-kernel-2.6-fonts-3.patch
  4. patch -Np1 < /tmp/patch/porteus/squashfs-lzma.patch
  5. patch -Np1 < /tmp/patch/porteus/aufs/aufs.patch
复制代码

这是第一步,初步内核补丁工作完成了,但是这里有一点要注意,因为 aufs 补丁不光是打完补丁就完事了,还需要把相关源码拷贝到内核相关目录中去。

  1. cp -dprR /tmp/patch/porteus/aufs fs/
  2. cp -dprR /tmp/patch/porteus/aufs/Documentation/ABI/testing/* Documentation/ABI/testing
  3. cp -dprR /tmp/patch/porteus/aufs/include/linux/aufs_type.h include/linux
复制代码
最后一句请特别注意,不要把aufs 补丁中 include/linux/目录里的所有文件都拷入内核的include/linux/目录中,余下的那个Kbuild 千万不要拷,切记,如果不信,你把两个目录中的 Kbuild 打开对比一下就知道了。

本来还想打BFS补丁和鸡血补丁的,但是经测试,结果发现,鸡血补丁完全不支持BFS,而鸡血补丁打上后,可能是源码要经过修正,总是提示函数的写法尚未被支持,然后出错中断,但是非常有意思的是,如果CPU类型选为 pentium pro 反而可以通过编译, Google 了一下,没找到解决方案,而我对C源码的了解又近于白痴,所以放弃了这两个补丁。

至此,补丁工作完成。开始正式的内核编译过程。

编译内核
直接上命令,等有需要说明的时候再补充一下:

  1. cd /tmp/kernel/linux-2.6.37.4
  2. cp /boot/.config .
  3. make oldconfig
复制代码
唉。。。。逃不走啊,这里就要说明一下了。
之所以要 cp .config 文件,主要是,继承大量的原版 iThink Slax 内核的配置,当然,我的主要目的是为了省力,省去再一项项点选驱动了,如果你的内核没有 .config 这个文件,那么也没关系,可以直接生成一个,用 make menuconfig 或者  make xconfig 都可以。
至于 make oldconfig 主要是因为新老内核在内容上有非常多的变化,所以,需要先把老内核文件与新内核同步,在执行这条命令时,会出很多选项,大多是回答 y/n/m 的,我在这里的原则是,能 m 则 m ,遇 debug 时,全都跳过不选,遇到必须的,又没有 m 选项的,才会选y。
这里:
y 是指把这个模块编译进内核文件中,成为内置模块(就是那个 vmlinuz)
m 是指,把这个模块编译成外挂模块,这就是常见的那种 .ko 驱动之类的模块
n 或者 直接回车,则表示不选当前模块,并且这个模块不参与编译,放弃此项功能或驱动

累!接上回打命令:

  1. make xconfig
  2. make scripts
  3. make prepare
  4. make all
复制代码
这里就说一下最上面的 make xconfig ,这条命令会打开一个图形界面的内核配置界面,在这个界面中,你可以更详细清晰地看到所有的模块选项(还配有每个选项的说明哦),在这里,你选择自己需要的就行了,不过这里我说一下我的几个重点检查的地方:

1、内核压缩方式,我选的是 lzma 方式,这个在第一个常规选项里
---[General setup]/[kernell compression mode]
2、process 选项里,我选的 i586 处理器
---[Processor type and features]/[Processor family]
3、内存选的是 64G 模式(也就是PAE)
---[Processor type and features]/[High Memory Support]
4、loop device 选 Y,表示内置它,这里要说一下,以前的SLAX这里选的是 m 表示可以生成一个 loop.ko 文件,但是新版 squashfs 4 以后,我发现,这个驱动外置的后果很严重,会造成 loop 设置数量受限的问题。
---[Device Drivers]/[Block device]/[Loopback device support]
5、squashfs 里要选 lzma 和 lzo 压缩支持,其它的都不选,另外,squashfs 本身要选择为 m,即外挂
---[File systems]/[Miscellaneous filesystems]/[SquashFS 4.0 - Squashed file system support]
6、aufs 选择为 m 外挂,其中 Maximum number of branches 选项中,我选的是 511 ,这是我自己测出来确实是压缩和效率都比较均衡的值了
---[File systems]/[Miscellaneous filesystems]/[Aufs (Advanced multi layered unification filesystem) support]

以上几点是要特别注意一点的,另外,老机器的兄弟们就不要选 64G 内存了,这可能与你的CPU不兼容。

累死我了!

如果不出意外的话(当然,在630上编译是没什么意外了),编译会顺利完成,如果出错了,最偷懒的办法是看清楚错误出现在哪个模块文件上,跑到  xconfig 中去掉它,嘿嘿,不过别忘了清理,重配置完成后,强烈建议再执行一下下面两条命令:

  1. make clean
  2. make scripts
  3. make prepare
复制代码
然后再重新 make

安装内核
编译成功完成后,安装内核,主要有以下步骤。
一、安装内核模块(你也可以说这就是外挂驱动,虽然驱动这个词不是很准确)

  1. INSTALL_MOD_PATH=/tmp/newkernell-2.6.37.4 make modules_install
复制代码
二、提取内核头文件

  1. make headers_install ARCH=i386 INSTALL_HDR_PATH=/tmp/newkernel-2.6.37.4/usr
复制代码
三、提取内核及保存内核配置文件

  1. mkdir /tmp/newkernel-2.6.37.4/boot
  2. cp arch/x86/boot/bzImage /tmp/newkernel-2.6.37.4/boot/vmlinuz  (注意字母大小写!)
  3. cp .config /tmp/newkernel-2.6.37.4/boot
复制代码
四、保存内核源码

  1. make clean
  2. make prepare
  3. mkdir /tmp/newkernel-2.6.37.4/usr/src/linux-2.6.37.4
  4. cp -dprR * /tmp/newkernel-2.6.37.4/usr/src/linux-2.6.37.4
复制代码

至此,内核算是基本完成了,所有内核文件都存放在了 /tmp/newkernel-2.6.37.4 目录中了。不过别忘了,还有点收尾工作,非常重要

清理头文件中的垃圾
安装好的内核产生的头文件目录中有非常多的安装脚本文件,我们需要清理掉它。

  1. cd /tmp/newkernel-2.6.37.4
  2. find usr/include -name .install -or -name ..install.cmd | xargs rm -fv
复制代码

修补链接
首先,修正安装内核时,内核源码指向链接错误

  1. cd /tmp/newkernel-2.6.37.4/lib/modules/2.6.37.4
  2. rm build
  3. rm source
  4. ln -sf /usr/src/linux-2.6.37.4 build
  5. ln -sf /usr/src/linux-2.6.37.4 source
复制代码

然后,创建一个内核源码链接

  1. cd /tmp/newkernel-2.6.37.4/usr/src
  2. ln -sf linux-2.6.37.4 linux
复制代码

至此,才算是完成了整个内核的工作!
你可以打包这个目录了,做份备份存档,呵呵
程序代码: [url=][选择][/url]
  1. cd /tmp
  2. dir2lzm newkernel-2.6.37.4 newkernel-2.6.37.4.lzm
复制代码

搞定!收工!

其实做起来就这么点事,写起来一大堆啊!

下一贴将写一下,如何生成 initrd 这个文件以及如何启用已经做好的内核。

AppleWolf 原创贴,转贴时麻烦留我一小名! http://ithink.8866.org



各位 Linux 爱好者,iThink Slax 非常渴望大家的加入,共同研究,共同努力,搞出我们国人自己的完善的 Live 化系统来。

同时,从 6.3.1 版开始,iThink Slax 将在论坛公开所有 AppleWolf 自己所懂的经验与技术,同时也会公开所有 AppleWolf 本人所使用的工具脚本,欢迎大家一起来研究讨论。
2#
发表于 2011-3-31 07:30:44 | 只看该作者
有几个问题请教applewolf老大:
1:/tmp/newkernell-2.6.37.4目录是什么时候建立的?
2:patch命令的用法,虽然网上有中文教程,写的不是很懂?
    此外,linux的补丁是不是在源代码的基础上打好,在编译?
    有没有这种可能有补丁1、2、3、4,假如有,是只打最后的补丁,还是挨个打补丁?
再次,菜鸟先行谢过了!

最后祝愿老大早日作出符合国人使用的linux!

这个纯属提议啊,别拍我!我用过porteus,感觉不是很适合本土使用,但它有个slackyd命令可以从slackware的镜像下载软件包,salix比slax有大得多,但它有个gslapt;不知道appplewolf老大有没有想整个包管理之类的玩意,哪怕借鉴一下
arch的abs或者gentoo的portage之类的,或者直接用他们的源,下载下来后台转换为ithinkslax所用,听说arch的abs和gentoo的portage很是相似,就是根据文件中的指示,到哪里下载源代码,用那些选项编译,最后在安装,不如ithinkslax也搞个这个玩意,有这么多发行版,每种的特色好就为我所用,为什么不呢?  纯属建议,求砖头!

[ 本帖最后由 my9823 于 2011-3-31 08:02 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2011-3-31 15:15:13 | 只看该作者
cd /tmp
mkdir kernel
cd kernel
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.37.y.git

[Copy to clipboard] [ - ]
CODE:
mv linux-2.6.37.y linux-2.6.37.4
cd linux-2.6.37.4
rm -rf .git


楼上的兄弟,请注意上面两个小节,linux-2.6.37.4 这个目录是 git clone 建立起来的,不过原始名不叫 linux-2.6.37.4 而是叫 linux-2.6.37.y 我在下面一个小节中,手动 mv linux-2.6.37.y 为 linux-2.6.37.4,具体情况,还请参阅 git 。

另外,对于 patch 命令,我实在是建议你可以 Google 一下,补丁是需要一个个打的,都要打上,而且是打在内核源码上的。

在 iThink Slax 中也有包管理器,但是很不幸,不是你上面提到过的任可一种第三方包管理器,而是完完全全原汁原味的官方包管理器: slackpkg + pkgtool
所谓的第三方包管理器一般是多了依赖性检查,但说实话,我一直觉得 slackware 的不检查依赖性正是其最大限度灵活性的一个重要体现,如果都跟其它发行版一样有依赖性检查,那我觉得就失去意义了,这里可以给你举个小例子:

比方说,我用 ldd * 2>/dev/null | grep 'not found' 在检查 /usr/lib 目录中运行库的依赖性时,发现少了一个库支持,那按别的发行版的做法就是,不管那个库所属包有多大,只管装上解决就OK,但是会遇到的问题是,那个包可能又面临其它程序和包的依赖性问题。但是在 slackware 中,我只管把相应包中的运行库拷贝出来,再进行检查就OK,这样,你觉得谁更灵活呢?!

另外,我一直不提倡用第三方源,因为第三方源最大的问题是,源本身的稳定性问题,我一直提倡用 slackware 官方的源,这样比较稳定可靠些,关于做包问题,我为 iThink Slax 写了独有的包制做脚本,非常方便,你无需关心版本问题,只管输入名字,目录,就可以自动做包了。而脚本本身调用的正是 slackpkg 的源及其包列表数据库,一切都是官方的。这两个脚本分别叫 : pkgmake (用于单包制做), pkglistmake (用于通过列表文件来制做集成包),同时,在我们论坛上我有公开整个系统的包列表,大家都可以随意修改并用 pkglistmake 生成自己的系统,整个系统制做过程被 BASIC 化了,人人都能做,而我这样做的目的就是希望有更多的朋友参与进来,一起研究,一起讨论,一起完善 iThink Slax。

最后,谢谢你的关心及建议,也衷心希望你也能加入我们 iThinkSlax ,其实,做系统并不神秘,并不是高难度的事。

AppleWolf         http://ithink.8866.org

[ 本帖最后由 AppleWolf 于 2011-3-31 15:18 编辑 ]
回复

使用道具 举报

4#
发表于 2011-4-1 21:28:58 | 只看该作者
其实我也是刚刚摸到门口,还没有入门呢!i希望applewolf老大搭建一个基本系统,然后可以搭配不同的桌面环境,这样就太好了,个人喜欢openbox+tint2!
回复

使用道具 举报

5#
 楼主| 发表于 2011-4-2 14:50:54 | 只看该作者
原帖由 坏小子 于 2011-4-1 21:28 发表
其实我也是刚刚摸到门口,还没有入门呢!i希望applewolf老大搭建一个基本系统,然后可以搭配不同的桌面环境,这样就太好了,个人喜欢openbox+tint2!


你可以下载 iThink Slax 的新版,然后去掉desktop模块 ,换成自己要的桌面就行了,因为iThink Slax 本来就把 xorg 与 desktop 给分离出来了。

core 其实就是一个基本系统,纯终端的,完全独立,内置了网络和各种基本功能,支持无线。
xorg 其实就是X的基础。
desktop 就是 KDE 或者你可以把这个换成任意别桌面的模块。
回复

使用道具 举报

6#
发表于 2011-4-2 21:44:36 | 只看该作者
老大,你终于出现了,我按照你的汉化slax教程做了一个中文slax,就等你更新编译slax内核的教程了,使用slax里的config文件编译内核,内核编译过程中出错怎么搞搞?
你的ithink体积有点大了

再请教一个问题,有一个linux live cd叫partedmagic,这个东东也经常更新,支持raid和lvm2,上个月就更新了好几回,但是我不知道怎么修改它,这个东东有两个版本,其中pxe网启版使用squashfs文件系统的,里面的sqfs文件不知道怎么挂载修改,解压出来再打包回去,结果体积变大,也启动不了,你试试,教教我怎么修改它
下载地址:
http://beefdrapes.partedmagic.com/

我已经会修改了

[ 本帖最后由 ones 于 2011-4-5 16:38 编辑 ]
回复

使用道具 举报

7#
发表于 2011-4-3 06:23:12 | 只看该作者
谢谢,这个要支持,下来看看,我想知道老大是如何知道软件包相互之间的依赖关系?
是根据lfs,还是ldd命令一个个的查询?或者直接在托马斯的基础上升级?
回复

使用道具 举报

8#
发表于 2011-4-3 09:42:28 | 只看该作者
iThink Slax 6.3.1在vmware虚拟机里测试,有些问题
在使用console下登录,然后startx,结果没启动起来,出现下面的画面

启动图形界面登录,使用root=toor登录,结果画面只是跳了一下,又跳回了登录界面
回复

使用道具 举报

9#
 楼主| 发表于 2011-4-6 13:31:37 | 只看该作者
目前不是你一个人遇到不能进图形界面的问题,在缺省执行 xconf + init4 后,有人反应过这种问题,问题机主要集中在NV显卡机上,还有VMWARE,因为我在做包的过程去掉了所有NV开源驱动,另外我从不在VMWARE下调试,因为我日常用的办公系统就是ITHINKSLAX,所以,一直是实机调试的,个人能力有限,手边没有太多的硬件平台测试,NV卡机和A卡机都没有,但据群里的人反应在ATI机上非常棒,看来主要就是VM和NV的问题了,由于没有这种卡,我不是很了解NV对图形系统的需求,所以这块一直是空白。

正是基于上述原因,所以,我公开了我整个系统的列表文件,同时提供了我自己写的生成系统用的全自动脚本,你完全可以到我们论坛去下载下来,然后自己尝试组合方式,如果成功了,非常希望你能把相关要点发布在论坛上,以便于我也可以在后续更新中加入这些要点。

目前我的依赖性检查还是基于LDD手动检查+日志追踪。

squashfs 文件系统是用mount 挂载的,mount -t squashfs -o ro 模块文件 挂载路径

但是需要注意,挂载方式下,只能是只读的,如果要修改,需要用 unsquashfs -d 目标路径 模块文件名,至于你提到的系统用的是什么版本,这个你可能需要去系统发布官方看一下说明,因为 squashfs 各版是不兼容的,我在编译 squashfs 时看了一下,大概有五种方式(在最新的 squashfs 4.2 上),gz、lzm1、lzm2、xz、lzo,这五种方式互不兼容,其中 gz 是最早的,lzm1 是 squashfs 3.5 以前的压缩方式,也就是 slax 官方采用的版本,lzm2 是 squashfs 4.0 以后的方式,也是所有从 slax 脱离出来的发布版采用得最广泛的方式,xz 是最新的方式,特点是 压缩效率低于上一代,但是解压和压缩比比上一代要更好,而正常系统使用时,只用到解压(确切地说,是访问被压缩档),而压缩比决定了系统是否拥有更小的内存占用率(我一直是用COPY2RAM的),xz 最大的好处是,从 2.6.38 内核开始,默认集成并支持了,不需要再打补丁了,启动的效率更高,占用的资源越小。

iThinnk Slax X 测试版现在正在清理,准备放出进行测试,它就是基于 squashfs xz 压缩的,为了保证有更多方便的资源,所以,我选择了与 porteus 同步,把新版包的名称定为了xzm (fanthom 可是老朋友了,以前常在 slax 坛子里交流咧,嘿嘿)。

还有,你打包回去后不能正常启动,有可能是压缩参数不正确,你需要看一下系统的相关调用脚本,比方说,我们常用的参数是加上字典大小 -b 512k :
mksquashfs 345 345.lzm -b 512k

另外,经过群里的 hit22 测试,lxde 可以正常工作在 ithinkslax 平台上,其工作仅仅就是移除原有的 desktop 包,加入新的 lxde 包就完成了,这更进一步证实了 iThink Slax 各包之间的相互独立性!

[ 本帖最后由 AppleWolf 于 2011-4-6 13:35 编辑 ]

sendpix0.jpg (46.04 KB, 下载次数: 63)

iThink Slax X lzm vs xzm

iThink Slax X lzm vs xzm
回复

使用道具 举报

10#
发表于 2011-4-6 14:59:50 | 只看该作者
vmware 下测试,用KDE failsafe session模式在1500M内存下可以登录桌面,可以正常识别ubuntu x64虚拟机里的软RAID+LVM2,vmware虚拟三卡也加载了。因为内存不够,不知道KDE默认模式下为什么启动不了,大内存的朋友可以测试一下2G内存下虚拟机能否启动。
mksquashfs命令的-comp参数下为什么没有xz压缩呢?

实在太耗内存了,有什么方法可以像windows下挂载WIM而不耗内存呢?是因为启动中途就把CD弹出,全加载到内存来运行的原因吗?
回复

使用道具 举报

11#
 楼主| 发表于 2011-4-9 17:02:49 | 只看该作者
怎么说呢,清理内存其实完全不是必要的,因为内存管理模式完全与WINDOWS不同。具本原因,请GOOGLE一下你就知道了。

至于你看网络视频方面的问题,我倒是建议你可以做个链接,链接到本地硬盘上,比如 ln -sf /root/.firefox /mnt/sda5/ff-cache,这样的话,所有的视频缓存就自动存到D盘中了,但是建议在启动FF之前,把这个目录中所有的东东都先拷到 /mnt/sda5/ff-cache 中,也许你会觉得每次这样做很麻烦,那没关系,你可以把你做的这个动作打包,下次启动时,自动就把FF所有缓存存到硬盘上了。

另外,内存不够是一个问题,主要是我个人喜好问题,我不喜欢从硬盘启动系统,内存的效率要比硬盘高近一千倍,即便是我用了SQUASHFS XZ 压缩格式进行访问,其效率还是高于从硬盘启动。所以,我从来都是COPY2RAM的

还有 squashfs-tools 我在编译最新版时就指定了默认的压缩格式为 xz ,所以,无需指定 -comp 参数,除非你需要它处理非 xz 格式,比如 lzma2 或者 xz 或者 lzo (这一点请注意,squashfs-tools 不能同时支持 lzm1 和 lzm2 ,只能选其一,这是源码决定的,而我的选择是,放弃对lzm1 格式的支持)

还有,Linux 内存太小能不能运行的问题,可以举个实例和你说,我曾用非COPY2RAM方式,用 iThinkSlax KDE3版在128M内存机上启动成功过。启动完成后,可用内存不足1M,但是它依然在工作。

另外,只能进安全方式,一般是因为驱动支持方面的问题,昨天 hit22 已制做好 iThinkX 的NV卡驱动,并成功解决了他自己只能进安全模式的问题,也就是说,到昨天为止,iThinkX 已经可以在主流显卡中正常运转了,A卡在N卡之前就已证实可以正常启用,驱动可以从我们论坛下载。再次说一下,我不建议在虚拟机中跑,虽然我在内核中启用了vmware不少支持,但是你可能还是需要自己在虚拟机中装 vmware-tools ,一个是驱动,一个是应用工具,是不同的,也许你自己装了 vware-tools 才能解决问题。

欢迎你到我们论坛里来讨论这些问题:http://ithink.8866.org

AppleWolf
回复

使用道具 举报

12#
发表于 2011-4-9 19:42:05 | 只看该作者
linux的内存管理是有内存先用内存,毕竟内存比硬盘速度快多了,不行了在交换分区!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-12-11 02:14

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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