1. ホーム
  2. gdb

関数の暗黙の宣言 この警告問題の原因と解決策

2022-02-22 05:55:40

http://blog.csdn.net/fpmystar/article/details/4168073



ヘッダーの欠落

最近、SDカード用のSEP4020ドライバを改良しているときに、すべての警告を変更すると暗黙の関数宣言の警告エラーが報告され続け、その原因をググってみると、次の2つの状況があることがわかりました。

1 関数がある c ファイルから .o ターゲットファイルが生成されていない。



2 その関数がある c ファイルで定義されているが、その関数に関連する .h ファイルで宣言されていない。

[root@mail linux]# make



CHK include/linux/version.h



make[1]: "include/asm-arm/mach-types.h" が最新です。



CHK include/linux/compile.h



CHK usr/initramfs_list



CC ドライバ/mmc/sep_mci.o



drivers/mmc/sep_mci.c: 関数 `sep4020sdi_probe' にあります。



drivers/mmc/sep_mci.c:745: 警告: 関数 `clk_get' の暗黙の宣言



drivers/mmc/sep_mci.c:745: 警告: 代入はキャストせずに整数からポインタを作成します。



drivers/mmc/sep_mci.c:754: 警告: 関数 `clk_enable' の暗黙の宣言



drivers/mmc/sep_mci.c:800: warning: implicit declaration of function `clk_put'.



ドライバー/mmc/sep_mci.c: 関数 `sep4020sdi_remove' にあります。



drivers/mmc/sep_mci.c:830: warning: implicit declaration of function `clk_disable'.



ドライバー/mmc/sep_mci.c: 関数 `sep4020sdi_irq' にあります。



drivers/mmc/sep_mci.c:197: 警告: 'sdi_cclear' はこの関数内で初期化されずに使用される可能性があります。



ドライバー/mmc/sep_mci.c: 関数 `sep4020sdi_probe' にあります。



drivers/mmc/sep_mci.c:673: 警告: 'host' はこの関数内で初期化されていない状態で使用されている可能性があります。



drivers/mmc/sep_mci.c: トップレベルでは



drivers/mmc/sep_mci.c:337: 警告: 'sep4020sdi_irq_cd' は定義されているが使用されていない



LD drivers/mmc/built-in.o



LDドライバ/ビルトイン.o



GEN .バージョン



CHK include/linux/compile.h



UPD include/linux/compile.h



CC init/version.o



LD init/built-in.o



LD .tmp_vmlinux1



KSYM .tmp_kallsyms1.



AS .tmp_kallsyms1.o



LD .tmp_vmlinux2



KSYM .tmp_kallsyms2.



AS .tmp_kallsyms2.o



LD vmlinux



SYSMAP System.map



SYSMAP .tmp_System.map



OBJCOPY arch/arm/boot/Image



カーネル:arch/arm/boot/Imageが準備できました。



GZIP arch/arm/boot/compressed/piggy.gz



AS arch/arm/boot/compressed/piggy.o。



LD arch/arm/boot/compressed/vmlinux



OBJCOPY arch/arm/boot/zImage



カーネル:arch/arm/boot/zImageは準備完了です。



モジュールの構築、第2段階。



モデポスト



そこで、sep_mci.c のヘッダに <linux/clk.h> を入れただけです。

これでもう警告は出ませんね。