系统相关
首页 > 系统相关> > 如何下载Torvalds Linux内核主机,(重新)编译它,并用QEMU启动它?

如何下载Torvalds Linux内核主机,(重新)编译它,并用QEMU启动它?

作者:互联网

几天以来,我正在开发一个小项目,以发现内核编程.但是,我在互联网上阅读了很多内容并在内核编译之前提出了一个问题,我觉得在某些时候仍然丢失了.

如果我需要做一些内核编程,我认为使用Linus Torvalds的Linux源代码将是最好的开始.所以我做了以下(来自MacOS High Sierra):

>下载内核的来源:https://github.com/torvalds/linux
>解压缩它
>启动终端并运行:

> vagrant init
>流浪汉
>流浪汉ssh

>连接后,我键入:

> cd / vagrant / linux为了进入Linux源解压缩文件夹
> make menuconfig我只是按了确定/保存
> sudo make -j 4&& sudo make modules_install -j 4&& sudo make install -j 4

现在,我得到一个小错误:

agrant @vagrant-ubuntu-trusty-64:/vagrant/Kernel-Programming/linx-kernel$sudo make -j 4 && sudo make modules_install -j 4 && sudo make install -j 4
  CHK include/config/kernel.release
CHK     include/generated/uapi/linux/version.h
CHK     include/generated/utsrelease.h
CHK     scripts/mod/devicetable-offsets.h
CHK     include/generated/timeconst.h
CHK     include/generated/bounds.h
CHK     include/generated/asm-offsets.h
CALL    scripts/checksyscalls.sh
CHK     include/generated/compile.h
SKIPPED include/generated/compile.h
CC      my_syscalls/uptime.o
AR      my_syscalls/built-in.o
CC[M]  net/ipv4/netfilter/ipt_ECN.o
In file included from net/ipv4/netfilter/ipt_ECN.c:20:0:
net/ipv4/netfilter/ipt_ECN.c: In function 'set_ect_ip':
./include/uapi/linux/netfilter_ipv4/ipt_ECN.h:16:27: error: 'XT_DSCP_MASK' undeclared(first use in this function)
 #define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
                           ^
net/ipv4/netfilter/ipt_ECN.c:33:18: note: in expansion of macro 'IPT_ECN_IP_MASK'
  if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) {
                  ^
./include/uapi/linux/netfilter_ipv4/ipt_ECN.h:16:27: note: each undeclared identifier is reported only once for each function it appears in
 #define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
                           ^
net/ipv4/netfilter/ipt_ECN.c:33:18: note: in expansion of macro 'IPT_ECN_IP_MASK'
  if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) {
                  ^
net/ipv4/netfilter/ipt_ECN.c: In function 'ecn_tg_check':
./include/uapi/linux/netfilter_ipv4/ipt_ECN.h:16:27: error: 'XT_DSCP_MASK' undeclared(first use in this function)
 #define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
                           ^
net/ipv4/netfilter/ipt_ECN.c:105:23: note: in expansion of macro 'IPT_ECN_IP_MASK'
  if (einfo->ip_ect & ~IPT_ECN_IP_MASK)
{
                       ^
make[3]: *** [net / ipv4 / netfilter / ipt_ECN.o] Error 1
make[2]: *** [net / ipv4 / netfilter] Error 2
make[1]: *** [net / ipv4] Error 2
make: *** [net] Error 2
make: ***Waiting for unfinished jobs....

但是,我不知道这个错误是否会破坏一切.此外,即使编译完全正常,我如何测试我的“新Linux编译”?因为我添加了一个系统调用,我想测试它是否有效……我发现了一些关于update-initramfs的东西,但我没有看到链接/点,因为我编译的内核不是Ubuntu.

解决方法:

好的工作请记录下来的工作并将其发布在git / blog上,以便在mac OS X上编译linux内核所需的调整.

现在回答你的问题.

>运行vmware / virtualbox的最简单方法.因为他们是直截了当的.然后scp图像和测试.
> QEMU是测试内核的最佳方式.但普通人群并未广泛使用.还需要一点努力才能让它发挥作用.还需要编译Root FS来启动,因为你想测试系统调用.(你可以使用你的系统调用编写c代码并将其定义为init进程)

我希望我已经回答你了.

标签:macos-high-sierra,linux,linux-kernel,qemu
来源: https://codeday.me/bug/20191003/1847286.html