2017-11-29 16 views
0

カーネルプログラミングを発見するために、数日から少しプロジェクトを進めています。しかし、私はインターネットでたくさんのことを読んで、カーネルのコンパイルについて質問しましたが、いつかは失われてしまいました。ダウンロードTorvalds Kernel、QEMUで起動(再コンパイル)

私はいくつかのカーネルプログラミングをする必要がある場合、私はLinus TorvaldsのLinuxソースを使うのが最善の出発点だと考えました。それは

  • 起動端末とは、実行https://github.com/torvalds/linux
  • 解凍後:

    • ダウンロードカーネルのソース:だから私は、次の(MacOSのハイシエラからの)でした
      • vagrant init
      • vagrant up
      • vagrant ssh
      • 0123一度接続
    • 、私は、型付き:
      • cd /vagrant/linuxLinuxのソースに取得するために、フォルダ
      • 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ではないのでリンク/ポイントが表示されません。任意の説明

  • +0

    おそらくカーネル設定に何か問題があります。代わりにデフォルトの設定を使用してください。 'make i386_defconfig'を32bit x86に、' make x86_64_defconfig'を64bit x86にします。 –

    +0

    ありがとうございます。しかし、私のシステムコールが機能するかどうかをカーネルにロードするにはどうすればいいですか? – Emixam23

    +0

    間接システムチェック:http://man7.org/linux/manage/man2/syscall.2.html –

    答えて

    1

    良い仕事のため

    おかげで仕事を文書化し、Linuxカーネルは、あなたの質問に答えるために、MAC OS Xを今すぐ

    上でコンパイル取得するために必要な調整のgitの/ブログの多くにそれを投稿してください。

    1. vmware/virtualboxを実行する最も簡単な方法。彼らはまっすぐであるので。次にscpイメージとテスト。
    2. QEMUは、カーネルをテストする最も良い方法です。一般集団では広く使用されていません。また、それを稼働させるための努力が必要です。 (システムコールを使ってcコードを書いて、initプロセスとして定義することもできます)

    私はあなたに答えました。

    +0

    この回答をありがとうございますが、私のカーネル(ソース)をQEMU – Emixam23

    +0

    'qemu-system-i386 -kernel bzImage -initrd initrd.img-2.6.32.59 -m 512M'を使うことができます.PATH_KERNELとPATH_INITRDはそれに応じて使います。 initrdの作成方法に注意してください。その全体的に異なる質問は、私は最高のRob Landleyのyoutube videoが好きです。簡単に言えば、彼はHello Worldのcプログラムをブロックし、クロスコンパイルされたバイナリをinitとして作成します。 initrdを作成します。リンクhttps://www.youtube.com/watch?v=Sk9TatW9ino – Devidas

    関連する問題