linux駆動開発プロセスと方法

4492 ワード

方法1:駆動をカーネルに組み込む方法.最初のLinuxドライバを書くようにハンドルを教えますhttps://blog.csdn.net/morixinguan/article/details/54620088方法2:linuxのmoduleモジュールのコンパイル手順を簡単な例で説明するhttps://blog.csdn.net/yu132563/article/details/51227804
Linuxドライバは一般的にモジュールmoduleの形式でロードされ、まずドライバをモジュールの形式にコンパイルする必要がある.簡単な例だc file [cpp] view plain copy
#include   
#include   
#include   

static int __init test_init(void)  
{  
       printk("init module/n");  

       return 0;  
}  
static void __exit test_exit(void)  
{  
       printk("exit modules/n");  
}  

module_init(test_init);  
module_exit(test_exit);    

Over of hello.c file Makefileは、
PWD = $(shell pwd)  
KERNEL_SRC = /usr/src/linux-source-2.6.15/  

obj-m := test.o  
module-objs := test.o  

all:  
       $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules  


clean:  
       rm *.ko  
       rm *.o  

testでcとMakefileが存在するディレクトリの下でmakeを実行し、類似の出力が表示された場合
make -C /usr/src/linux-source-2.6.15/ M=/home/vmeth modules  

make[1]: Entering directory `/usr/src/linux-source-2.6.15'  
  CC [M]  /home/vmeth/hello.o  
  Building modules, stage 2.  
  MODPOST  
  CC      /home/vmeth/hello.mod.o  
  LD [M]  /home/vmeth/hello.ko  
make[1]: Leaving directory `/usr/src/linux-source-2.6.15'  

普通は次のMakefileで、
# Makefile2.6  
ifneq ($(KERNELRELEASE),)  
#kbuild syntax. dependency relationshsip of files and target modules are listed here.  

mymodule-objs := hello.o  
obj-m := hello.o     

else  
PWD  := $(shell pwd)  

KVER ?= $(shell uname -r)  
KDIR := /lib/modules/$(KVER)/build #KDIR            Makefile      
                                         /usr/src/linux-source-2.6.15/*   
all:  
       $(MAKE) -C $(KDIR) M=$(PWD)  

clean:  
       rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions  

endif  

KERNELLRELEASEは、カーネルソースの最上位のMakefileで定義された変数であり、このMakefileを最初に読み込んで実行したときにKERNELLRELEASEは定義されていないため、makeはelseを実行した後の内容を読み込む.makeのターゲットがallである場合、−C(KDIR)は、カーネルソースディレクトリの下でそこのMakefileを読み出すことを示す.M=(KDI R)は、カーネルソースディレクトリの下にジャンプしてそこのM a k e f i l eを読み取ることを示す.M=(PWD)は、現在のディレクトリに戻って現在のMakefileを読み込み、実行することを示す.カーネルソースディレクトリから戻ると、KERNELLRELEASEが定義され、kbuildもkbuild構文を解析する文を起動し、makeはelseの前の内容を読み取り続けます.elseの前の内容はkbuild構文の文で、モジュールソースコード内の各ファイルの依存関係と、生成するターゲットモジュール名を示します.各カーネルの名前には、uname-rコマンドに表示される値であるバージョン番号が含まれています.以下のエラーの解決方法について:Makefile:1:*セパレータを漏らすこれは多種の情況があります:1、命令の前にtabキー2をプラスして、句読点が中国語の形の3に負けたかもしれません.例えば、上のファイル:ifneqの後ろにスペースを追加します