Mac下VirtualBox中编译安装Linux内核

过程和问题记录:

1. Git太慢了,只好直接下压缩包linux-4.8.7.tar.xz
xz格式是采用LZMA压缩算法,压缩率最高.
解压方法是 tar -xJvf linux-4.8.7.tar.xz.

2. 不能在Mac文件系统下解压缩
因为虚拟机开的空间快不够了,最开始想放到host机的共享目录(通过VBox设置)下,遇到3个问题:
a) 普通用户访问共享目录无权限
要把用户加到vboxsf组:adduser woofy vboxsf
完了要重启VBox,才能以非root身份进入/media/sf_xxx映射目录操作.

b) 解压时报错,无法创建符号链接文件,原因是VBox出于安全性考虑默认禁止了host上的符号链接,需要额外设置,在Mac终端下:
VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARED_DIR_NAME 1
SHARED_DIR_NAME为host机上原始目录名(不带sf前缀). 设置完要重启VBox才会生效.

c) net/netfilter目录下一些文件会丢失
原因是里面有一些仅靠大小写区分的文件名如 xt_TCPMSS.c/xt_tcpmss.c,而Mac的文件系统HFS+是case-preserving和case-insensitive的,
也就是说这两个mac下认为是同一个文件,因此会丢1个. 类似情况的文件还有不少,导致在编译的时候会报错.
相关概念:https://en.wikipedia.org/wiki/Case_preservation

解决办法:还是放在Linux的文件系统下吧,给虚拟机多开点空间.

3. Mac GUI访问Linux文件
想用Mac下的编辑器看代码,或者更方便的操作,不想走ssh.
在Linux安装samba服务器,然后在Mac Finder中前往服务器即可. (快键键Command+k)
有2种配置方法:
1). 把GuestOS设置为桥接模式(同级独立IP),host可以直接反连,但需要接入网络环境获取IP.
2). NAT端口映射,hostip设置为127.0.0.1,smb端口为445和139,但映射端口不能和这两个一样否则主机连接可能连接出问题;用NAT可以在脱离网络环境下访问.

4. 内核编译
先参考Documentation/Changes说明检查必要的系统软件.
其余参考README下说明即可:
To configure and build the kernel, use:

cd /usr/src/linux-4.X
make O=/home/name/build/kernel menuconfig //图形化参数配置
make O=/home/name/build/kernel //编译内核
sudo make O=/home/name/build/kernel modules_install install //安装编译好的内核模块供动态加载

Please note: If the 'O=output/dir' option is used, then it must be
used for all invocations of make.

如果有2个核可以在make时指定-j2 加快速度.

编译出的核心文件是: build_dir/arch/x86/boot/bzImage
编译过程没有错误和告警. (Ubuntu16.04,GCC5.4)

5. 安装和重启
接着可以运行 make O=xxx install 安装,会自动将bzImage放到/boot/下,并自动生成initrd文件,
并试图更新grub的menu.lst.
由于当前grub没有使用menu.lst文件,于是直接修改grub.cfg文件找到对应entry或添加新entry.
然后重启看linux版本,确保是跑在新内核下.
同时持续关注看会不会跑出问题.

发表评论

电子邮件地址不会被公开。