编译内核使slackware13.37支持大内存

来源:互联网 发布:淘宝达人怎么到1w粉丝 编辑:程序博客网 时间:2024/05/16 04:44

        忙了一个月终于完成了项目,当然也赚了一笔小钱。想着换一台笔记本,毕竟是吃饭的家伙,要买个好一点的。

        本来觉得Thinkpad T420不错,但是去了一趟店里发现这台机器挺难看的。转来转去看到华硕的一台15.6英寸笔记本,相当喜欢就买了。新笔记本4个GB的内存,还有一个插槽可供扩展。现在内存这么便宜,索性又买了一根4GB组成双通道共8GB内存。

       之前一直使用32位的slackware13.37来做开发。不用64位是考虑到许多交叉编译工具在64位下使用非常蛋疼,且开发板也只支持32位的系统,我必须尽量保持PC端与开发板系统版本一致,以避免许多不必要的麻烦。

       问题是32位的slackware13.37最大只支持2.7GB左右的用户内存,剩余4、5个GB都白白浪费了,真可惜。本者”生命不止,折腾不息“的程序员原则,我到处寻找解决方法。资料说32位的系统最大可支持64GB内存,我仔细查了下这个PAE技术。原来32位的系统可以通过模拟36位地址线来支持最大64GB的内存。

       slackware13.37内核版本是2.6.37,默认开启的最大内存支持为4GB,我们可以通过重新编译内核将最大内存支持改为64GB。由于我们只是想让系统支持64GB内存,所以仍旧使用原来的内核源代码。slackware在安装的时候会询问是否安装内核源代码包,如果没有安装源代码,则需要手动将源代码从光盘拷入/usr/src,并解压。

       slackware下编译内核的步骤非常简单。首先进入源代码目录:

              cd /usr/src/linux-2.6.37

       然后读取当前所使用内核的配置:

              make oldconfig

       这时就可以配置内核了:

              make menuconfig

       在Processor Type and features路径下,找到HIgh Memory Support的选项,原本为4GB,我们将其改为64GB。

       然后保存配置并退出,开始编译内核:

              make

       经过一个多小时的编译,内核及模块已经编译成功了。安装模块:

              make modules_install

       然后安装内核:

              make install

       完成。

       重启后,遇到一个大麻烦,在启动的过程中出现错误:

              unable to mount root fs on 08:03

       再继续找资料,发现问题可能是内核没找到分区。为什么会这样呢?我用slackware的光盘启动电脑,进入光盘里的Linux控制台,并用chroot命令改变当前主目录为硬盘中的主目录。然后重新编译内核,在执行make menuconfig后配置内核时,我仔细在选项中寻找,终于发现原来没有在File System将ext4文件系统编译到内核中去,我的Linux分区使用的是ext4,而新编译的内核却不支持ext4格式,内核当然找不到我的启动分区啦。于是重新修改配置,在File Systems 中把ext4的文件系统The Extended 4 File System编译到内核中去,并且将ext2、ext3等不需要的文件系统去掉以加快内核的启动速度。然后把Reiserfs support也编译到内核中。

      然后重新make,并make modules_install,make install。完成后,重启电脑。

      终于,再也没有提示错误,顺利进入系统,悬着的一颗心也落了下来。还没结束呢,还得查看是否已经开启了大内存支持。在命令行下输入命令:

            top

      看到Mem 一行显示:

            Mem: 8083356k total

      成功了,好激动!


      对初学者来说编译内核具有较高难度,我们可以在Linux中再安装一个VirtualBox虚拟机软件,将同版本的Linux装在虚拟机中。然后将想要进行的内核编译等危险操作在虚拟机中先演练一遍,确保没问题后再在Host机上进行操作,这样可保证不出其它问题。如果Host启动不了,最彻底的方法就是重新安装一遍系统(我刚学Linux时就是这么干的,哈哈)。重装系统需要近一个小时,时间上很不划算,更不提配置开发环境等。所以能不重装系统,就不要重装系统了。Linux系统设计地非常巧妙,各个部分独立性比较强。我们可以使用LiveCD或者slackware光盘启动电脑,然后在光盘中的命令行下进行Host机的系统修复。