カーネルプログラミングを発見するために、数日から少しプロジェクトを進めています。しかし、私はインターネットでたくさんのことを読んで、カーネルのコンパイルについて質問しましたが、いつかは失われてしまいました。ダウンロードTorvalds Kernel、QEMUで起動(再コンパイル)
私はいくつかのカーネルプログラミングをする必要がある場合、私はLinus TorvaldsのLinuxソースを使うのが最善の出発点だと考えました。それは
- ダウンロードカーネルのソース:だから私は、次の(MacOSのハイシエラからの)でした
vagrant init
vagrant up
vagrant ssh
0123一度接続
- 、私は、型付き:
cd /vagrant/linux
Linuxのソースに取得するために、フォルダmake menuconfig
を解凍した私はちょうどOK /保存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ではないのでリンク/ポイントが表示されません。任意の説明
おそらくカーネル設定に何か問題があります。代わりにデフォルトの設定を使用してください。 'make i386_defconfig'を32bit x86に、' make x86_64_defconfig'を64bit x86にします。 –
ありがとうございます。しかし、私のシステムコールが機能するかどうかをカーネルにロードするにはどうすればいいですか? – Emixam23
間接システムチェック:http://man7.org/linux/manage/man2/syscall.2.html –