プログラムをビルドする方法は、カーネル モジュールをビルドする方法であり、C プログラム アプリケーションではありません。カーネル開発の環境には存在しstdio.h
ないため、エラーが発生します。
error: "stdio.h: No such file or directory" error
1) Linux アプリケーションをビルドする場合は、Makefile が間違っています。
Makefile を変更する必要があります
次の Makefile を使用します。
all: hello
test: test.c
gcc -o hello hello.c
clean:
rm -r *.o hello
2) カーネル モジュールをビルドする場合は、C コードが間違っています。
stdio.h
カーネル空間の開発では使用できません。カーネル開発の環境には存在しないため、エラーが発生します
main()
カーネル モジュールの C コードでは使用できません
printf()
カーネル モジュールの C コードでは使用できません
を使用する代わりにstdio.h
、次のインクルードを使用する必要があります
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
を使用する代わりに、使用int main() {
する必要があります
int init_module(void) {
printf()
使用の代わりに printk()
hello コードの代わりに次のhello モジュールを使用してください
/*
* hello-1.c - The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
カーネルモジュール開発の詳細については、次のリンクを参照してください。