我有一台运行 Snow Leopard 的 Mac,我知道我无法编译 Linux 内核。我使用 Linux VM (virtualbox) 来编译内核,但我想知道是否可以在 Eclipse (galileo) 上编译它。
答案1
说无法在 Mac 中构建内核的信息是不准确的。人们可以设置一个交叉编译器并将 x86 作为目标架构,或者为 power pc 构建一个内核黄狗Linux 发行版已经做到了。 A样本为 ARM7 设置交叉编译器的过程:
我在三月份开始了一个使用 ARM7 处理器的新嵌入式项目,所以我想尝试一下 GNU ARM 工具链。基本上我有兴趣在 Mac OS X 上的 Macbook Pro 上使用 GCC 交叉编译器和 Eclipse CDT 进行交叉开发。我们会看看这是否有效。 ;-)
因此,作为第一步,以下是我在 Mac OS X 上构建 GNU ARM 工具链的方法(这应该与在 Linux 上构建工具链没有什么不同):
首先下载并解压必要的软件包:binutils、gcc、newlib 和 gdb。
$ mkdir ~/crossgcc && cd ~/crossgcc
$ wget ftp://sourceware.org/pub/binutils/snapshots/binutils-2.18.50.tar.bz2
$ tar jxf binutils-2.18.50.tar.bz2
$ wget http://ftp.gnu.org/pub/gnu/gcc/gcc-4.2.3/gcc-4.2.3.tar.bz2
$ tar jxf gcc-4.2.3.tar.bz2
$ wget ftp://sources.redhat.com/pub/newlib/newlib-1.16.0.tar.gz
$ tar zxf newlib-1.16.0.tar.gz
$ wget http://ftp.gnu.org/pub/gnu/gdb/gdb-6.6.tar.gz
$ tar zxf gdb-6.6.tar.gz
安装目录应为/usr/local/crossgcc。
$ sudo mkdir /usr/local/crossgcc
$ sudo chmod 777 /usr/local/crossgcc
首先我们构建 binutils:
$ mkdir build-binutils && cd build-binutils
$ ../binutils-2.18.50/configure --target=arm-elf \
--prefix=/usr/local/crossgcc/ 2>&1 | tee configure.log
$ make all install 2>&1 | tee make.log
$ export PATH=$PATH:/usr/local/crossgcc/bin
构建支持 C/C++ 的 gcc 编译器:
$ cd ../gcc-4.2.3
$ ln -s ../newlib-1.16.0/newlib .
$ ln -s ../newlib-1.16.0/libgloss .
$ cd ..
$ mkdir build-gcc && cd build-gcc
$ ../gcc-4.2.3/configure --target=arm-elf \
--prefix=/usr/local/crossgcc/ --with-newlib \
--with-gnu-as --with-gnu-ld --enable-languages=c,c++ 2>&1 | tee configure.log
$ make all install 2>&1 | tee make.log
构建 gdb 调试器:
$ cd ..
$ mkdir build-gdb && cd build-gdb
$ ../gdb-6.6/configure --target=arm-elf --prefix=/usr/local/crossgcc/
$ make all install 2>&1 | tee make.log
在您的情况下,您需要一个交叉编译器来编译您不希望内核成为的任何目标体系结构。请注意,由于编译将在您的计算机上本地运行,因此它比在 VirtualBox 上构建速度更快。
答案2
只要您拥有所有头文件和适当的工具,就可以在其他系统上编译 Linux 内核。使用 Eclipse 效果不佳(如果有的话)。在 Linux 命令行中,输入“make config”。配置要制作的内核的选项。然后,阅读源代码附带的 README 文件。它将提供有关编译和安装的信息。有关内核的深入信息,请阅读本系列文章(http://www.linux.org/threads/%EF%BB%BFthe-linux-kernel-introduction.4203/)。