1. ホーム

linuxコンパイルエラー

2022-02-27 14:47:47








x86ではできていたのですが、ARMではいろいろと問題があって カーネルコードの準備 の問題、ありますね。 モジュールコード の問題、そして メイクファイル の問題があります。一見、些細な役割でも、うまくいかないと絡まってしまう。

<スパン タイプ1:カーネルコードが準備できていない

[プレーン]です。 プレーンを見る コピー
  1. [root@localhost module]# make   
  2. make -C /opt/kangear/kernel/linux-2.6.32.2 M=/root/desktop/kangear/module モジュールを作成します。  
  3. make[1]: ディレクトリ `/opt/kangear/kernel/linux-2.6.32.2' に進入しています。  
  4.   ERROR: カーネル構成が無効です。  
  5.          include/linux/autoconf.h または include/config/auto.conf が欠落しています。  
  6.          カーネルの src で 'make oldconfig && make prepare' を実行すると直ります。  
  7. <スパン
  8.   警告:シンボルバージョンダンプ /opt/kangear/kernel/linux-2.6.32.2/Module.symvers  
  9.            がない場合、モジュールは依存関係と modversions を持ちません。  
  10.   モジュールの構築、ステージ2。  
  11. /opt/kangear/kernel/linux-2.6.32.2/scripts/Makefile.modpost:42: include/config/auto.conf: そのようなファイルやディレクトリはありません  
  12. make[2]: *** ターゲット "include/config/auto.conf" を作成するためのルールがありません。 停止しました。  
  13. make[1]: *** [モジュール] エラー 2  
  14. make[1]: ディレクトリ `/opt/kangear/kernel/linux-2.6.32.2' から出る。  
  15. を作ってください。*** [すべて] エラー 2  
  16. [root@localhost module]#   
        これは、設定なしのクリーンなカーネルダウンロード、または .config を含むが make zImage を含まない設定です。zImage を使うためではなく、カーネルモジュールをより良くコンパイルするために、これをコンパイルしてください。

        この設定ファイル1つのために、完全なカーネルをコンパイルするのはもったいないです。

[プレーン]です。 プレーンを見る コピー
  1. <スパン [root@localhost linux-2.6.32.2]# make zImage  
  2.   HOSTLDスクリプト/kconfig/conf  
  3. scripts/kconfig/conf -s arch/arm/Kconfig  
  4.   CHK include/linux/version.h  
  5.   UPD include/linux/version.h  
  6.   include/asm-arm/mach-types.h を生成する。  
  7.   CHK include/linux/utsrelease.h  
  8.   UPD include/linux/utsrelease.h  
  9.   SYMLINK include/asm -> include/asm-arm  
  10.   CC kernel/bounds.s  
  11.   GEN include/linux/bounds.h  
  12.   CC arch/arm/kernel/asm-offsets.s  
  13.   GEN include/asm/asm-offsets.h  
  14.   CALL scripts/checksyscalls.shを実行します。  
  15.   CCスクリプト/mod/empty.o  
  16.   HOSTCC スクリプト/mod/mk_elfconfig  
  17.   MKELF scripts/mod/elfconfig.h  
  18.   HOSTCC scripts/mod/file2alias.o  
  19.   HOSTCCスクリプト/mod/modpost.o  
  20.   HOSTCC scripts/mod/sumversion.o  
  21.   HOSTLD スクリプト/mod/modpost  
  22.   HOSTCC スクリプト/kallsyms  
  23.   HOSTCCスクリプト/pnmtologo  
  24.   HOSTCCスクリプト/conmakehash  
  25.   CC init/main.o  
  26.   CHK include/linux/compile.h  
  27.   UPD include/linux/compile.h  
  28.   CC init/version.o  
  29. ^Cmake[1]: *** wait: 子プロセスがありません。 停止しました。  
  30. make[1]: *** 未完成のタスクを待機中 ....  
  31. make[1]: *** wait: 子プロセスがありません。 停止しました。  
  32. を作ってください。*** wait: 子プロセスがありません。 停止します。  
  33. を作成します。*** 未完成のタスクを待機中 ....  
  34. を作ってください。*** wait: 子プロセスがありません。 停止します。  
  35. [root@localhost linux-2.6.32.2]#.   
        ここで、もうひとつのメーキャップである

[プレーン]です。 プレーンを見る コピー
  1. [root@localhost module]# make  
  2. make -C /opt/kangear/kernel/linux-2.6.32.2 M=/root/desktop/kangear/module モジュールを作成します。  
  3. make[1]: ディレクトリ `/opt/kangear/kernel/linux-2.6.32.2' に進入しています。  
  4.   警告:シンボルバージョンダンプ /opt/kangear/kernel/linux-2.6.32.2/Module.symvers  
  5.            がない場合、モジュールは依存関係と modversions を持ちません。  
  6.   CC [M] /root/desktop/kangear/module/hello.o  
  7.   モジュールの構築、第2段階。  
  8.   MODPOST 1モジュール  
  9. 警告: modpost: MODULE_LICENSE() が /root/desktop/kangear/module/hello.o で欠落しています。  
  10. 詳細は include/linux/module.h を参照してください。  
  11.   CC /root/desktop/kangear/module/hello.mod.o  
  12.   LD [M] /root/desktop/kangear/module/hello.ko  
  13. make[1]: ディレクトリ `/opt/kangear/kernel/linux-2.6.32.2' から出る。  
  14. [root@localhost module]# ls  
  15. hello.c hello.mod.c hello.o modules.order パラメータ  
  16. hello.ko hello.mod.o Makefile Module.symvers シンボル  
  17. [root@localhost module]#   

        注意すること hello.ko そして出てくるのが

2つ目のエラー:モジュールコードに例外が発生

[プレーン]です。 プレーンを見る コピー
  1. [root@localhost hello]# make  
  2. make -C /opt/kangear/kernel/linux-2.6.32.2 M=/opt/kangear/hello モジュールを作成します。  
  3. make[1]: ディレクトリ `/opt/kangear/kernel/linux-2.6.32.2' に進入しています。  
  4.   警告:シンボルバージョンダンプ /opt/kangear/kernel/linux-2.6.32.2/Module.symvers  
  5.            がない場合、モジュールは依存関係と modversions を持ちません。  
  6.   CC [M] /opt/kangear/hello/hello.o  
  7. /opt/kangear/hello/hello.c:3: error: expect declaration specifiers or '...' before string constant  
  8. /opt/kangear/hello/hello.c:3: 警告: データ定義に型またはストレージクラスがありません。  
  9. /opt/kangear/hello/hello.c:3: 警告: 'MODULE_LECENSE' の宣言で型のデフォルトが 'int' になっています。  
  10. /opt/kangear/hello/hello.c:3: 警告: 関数宣言はプロトタイプではありません。  
  11. /opt/kangear/hello/hello.c:17: エラー: '__inittest' の再定義  
  12. /opt/kangear/hello/hello.c:16: 注意: '__inittest' の以前の定義はここです。  
  13. /opt/kangear/hello/hello.c: 関数 '__inittest' の中です。  
  14. /opt/kangear/hello/hello.c:17: 警告: 互換性のないポインタ型からの戻り値  
  15. /opt/kangear/hello/hello.c: トップレベルでは  
  16. /opt/kangear/hello/hello.c:17: error: 'init_module' の再定義  
  17. /opt/kangear/hello/hello.c:16: 注意: 'init_module' の以前の定義はここです。  
  18. make[2]です。*** [/opt/kangear/hello/hello.o] Error 1  
  19. make[1]です。*** [_module_/opt/kangear/hello] Error 2  
  20. make[1]: ディレクトリ `/opt/kangear/kernel/linux-2.6.32.2' から出る。  
  21. を作成します。*** [デフォルト] エラー 2  
  22. [root@localhost hello]# make  

        これはほとんどモジュールのコードエラーで、今は中国関連のものが入っていたり、記号があったりします。ブログからコピーしたコードや、win環境でueで編集したコードを、Linuxに直接コピーするとこの問題が発生します。コードを再入力するしかない。適当な方法はまだ見つかっていません。(シンタックスの問題は省きます)





タイプ 3: モジュールの Makefile のシンタックスエラー

  1. [root@localhost hello]# make  
  2. を作成します。default' に対して何もすることはありません。  
  3. [root@localhost hello]#   
        対応するmakefileは、コマンド
[プレーン]です。 プレーンを見る コピー
  1. のデフォルトになります。  
  2. make -C $(KERNELDIR) M=$(PWD)モジュール  
 make の前にタブキーを置くべきである。あるいは、makeの前にはタブの代わりにスペースを入れるべきかもしれません。

x86ではできていたのですが、ARMではいろいろと問題があって カーネルコードの準備 の問題、ありますね。 モジュールコード の問題、そして メイクファイル の問題があります。一見、些細な役割でも、うまくいかないと絡まってしまう。

<スパン タイプ1:カーネルコードが準備できていない

  1. [root@localhost module]# make   
  2. make -C /opt/kangear/kernel/linux-2.6.32.2 M=/root/desktop/kangear/module モジュールを作成します。  
  3. make[1]: ディレクトリ `/opt/kangear/kernel/linux-2.6.32.2' に進入しています。  
  4.   ERROR: カーネル構成が無効です。