ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-10-03 06:50:41  阅读:280  来源: 互联网

标签:macos-high-sierra linux linux-kernel 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有