ソースからLinuxカーネルをコンパイルしたい(https://github.com/UDOOboard/linux_kernel)Ubuntu仮想マシンから。
私が実行したとき:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make modules
次のような警告がたくさん表示されます。
WARNING: "do_sync_read" [fs/nfs/nfs.ko] has no CRC!
このモジュールはまだ構築されていません。この問題をどのように解決できますか?
答え1
このスレッドは、次のエラーメッセージに関連しているようです。kbuild:偽CRC警告なし:
# 2004/08/15 11:54:27+02:00 sam@xxxxxxxxxxxxxxxxx # kbuild: Bogus "has no CRC" in external module builds # # From: Pavel Roskin <proski@xxxxxxx> # The recent fixes for the external module build have fixed the major # breakage, but they left one annoyance unfixed. If CONFIG_MODVERSIONS is # disabled, a warning is printed for every exported symbol that is has no # CRC. For instance, I see this when compiling the standalone Orinoco # driver on Linux 2.6.6-rc3: # # *** Warning: "__orinoco_down" [/usr/local/src/orinoco/spectrum_cs.ko] has # no CRC! # *** Warning: "hermes_struct_init" [/usr/local/src/orinoco/spectrum_cs.ko] # has no CRC! # *** Warning: "free_orinocodev" [/usr/local/src/orinoco/spectrum_cs.ko] has # no CRC! # [further warnings skipped]
このスレッドで「CONFIG_MODVERSIONS linux」を検索すると、次のタイトルのページが表示されます。カーネル記号と CONFIG_MODVERSIONS。このページから抜粋:
CONFIG_MODVERSIONS人々の生活をより便利にするために開発された概念です。本質的に達成する目的は、モジュールが存在する場合、そのモジュールのカーネルデータ構造、タイプ、または機能がロードされるとロードに失敗することを認識し、そのモジュールをすべてのカーネルにロードしようとすることです。モジュールの目的が変更されました。
カーネルが使用中でない場合CONFIG_MODVERSIONS有効にすると、そのカーネルバージョン用に特別にコンパイルされたモジュールとMOVERSIONSを有効にすることなく、コンパイルされたモジュールのみをロードできます。
ただし、カーネルが次に構築されている場合CONFIG_MODVERSIONS有効にすると、同じカーネルバージョン用にコンパイルされ、MOVERSIONSがオフになっているモジュールをロードできます。しかし、これが重要な部分です。モジュールが使用するカーネルAPIが変更されない限り、MDOVERSIONSをオンにしてコンパイルされたすべてのモジュールをロードすることもできます。
このページは次のとおりです。
モジュールのシンボルをエクスポートしたくない場合は、次のように使用できます。EXPORT_NO_SYMBOLSマクロ。
私はこのシステムを使って構築します。これは、このシステムから別のシステムにコンパイルされたモジュールをインポートする予定がないと思うからです。
メモ:.configファイルまたは.configファイルでこれを行うことができますmake menuconfig
。