linux駆動開発基礎
2065 ワード
参考書
『Linuxデバイス駆動第3版』
『組み込みlinux応用開発完全マニュアル』(韦東山)
『Linux設備駆動開発詳細』(宋宝華)
私のシステムはubuntu 10.04 LTSです.
仮想マシンVirtualBox 4.20
開発ボードフレンドリーアームSBC 2404
仮想マシンにubuntuをインストールして、私はCentOSを振り回したことがあって、最後にやはりubuntuを選んで、ubuntuが人間的にしたほうがいいと感じて、比較的に簡単で、しかも使う人が多くて、問題に出会って勝手に検索して、多く解決方法を見つけることができます.
ホストはwinxpでsource insightを使ってコードをすばやく読み取り、修正することができます.純linux環境は私などにとって本当に憂鬱です.さらに、仮想マシンのコンパイルも遅くありません.
ホストと仮想マシンの直接的な交換は、sambaを使用することをお勧めします.windowのツールはネットワークホストのディレクトリに直接アクセスすることができるので、ubootのプロジェクトがもともと仮想でコンパイルされていたなど、非常に便利です.
sambaを通じて、windowの下でリモートホストベースのsource insightプロジェクトを直接構築することができ、コードを直接修正することができ、非常に迅速で便利です.
仮想マシンがオンになると最小化され、SecureCRTを使用してubuntuホストにログインし、コマンドを直接ノックし、コードを変更するにはsambaを通じてソースコードを直接編集します.
最後に、コアを走ることができる開発ボードがあり、NIC駆動が必要です.これが一番重要です.
開発ボードの現在実行中のカーネルを準備するカーネルツリーは、ドライバがカーネルのバージョンと一致する必要があるため、コンパイルされたカーネルソースコードです.
次にNFSを構成し、開発ボードがNFSをルートファイルシステムとして起動できるようにするのが最も便利で、コードをコピーし、直接開発ボードで仮想マシンのファイルにアクセスしなければならない.
hello worldドライバコード、LDD第2章のコードを参照
makefileの内容
すべてが正常であればhelloを生成します.ko、これは駆動モジュールで、システムにロードするだけです.
# insmod ./hello.ko
# rmmod hello
『Linuxデバイス駆動第3版』
『組み込みlinux応用開発完全マニュアル』(韦東山)
『Linux設備駆動開発詳細』(宋宝華)
私のシステムはubuntu 10.04 LTSです.
仮想マシンVirtualBox 4.20
開発ボードフレンドリーアームSBC 2404
仮想マシンにubuntuをインストールして、私はCentOSを振り回したことがあって、最後にやはりubuntuを選んで、ubuntuが人間的にしたほうがいいと感じて、比較的に簡単で、しかも使う人が多くて、問題に出会って勝手に検索して、多く解決方法を見つけることができます.
ホストはwinxpでsource insightを使ってコードをすばやく読み取り、修正することができます.純linux環境は私などにとって本当に憂鬱です.さらに、仮想マシンのコンパイルも遅くありません.
ホストと仮想マシンの直接的な交換は、sambaを使用することをお勧めします.windowのツールはネットワークホストのディレクトリに直接アクセスすることができるので、ubootのプロジェクトがもともと仮想でコンパイルされていたなど、非常に便利です.
sambaを通じて、windowの下でリモートホストベースのsource insightプロジェクトを直接構築することができ、コードを直接修正することができ、非常に迅速で便利です.
仮想マシンがオンになると最小化され、SecureCRTを使用してubuntuホストにログインし、コマンドを直接ノックし、コードを変更するにはsambaを通じてソースコードを直接編集します.
最後に、コアを走ることができる開発ボードがあり、NIC駆動が必要です.これが一番重要です.
開発ボードの現在実行中のカーネルを準備するカーネルツリーは、ドライバがカーネルのバージョンと一致する必要があるため、コンパイルされたカーネルソースコードです.
次にNFSを構成し、開発ボードがNFSをルートファイルシステムとして起動できるようにするのが最も便利で、コードをコピーし、直接開発ボードで仮想マシンのファイルにアクセスしなければならない.
hello worldドライバコード、LDD第2章のコードを参照
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
int __init hello_init(void)
{
printk(KERN_INFO "HELLO WORLD
");
return 0;
}
void __exit hello_exit(void)
{
printk(KERN_INFO "goodby
");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Etual<[email protected]>");
MODULE_DESCRIPTION("simple hello world demo");
MODULE_LICENSE("Dual BSD/GPL");
makefileの内容
TARGET = hello
obj-m := $(TARGET).o
KERNELDIR ?= /sbc2440/kernel/linux-2.6.22.6
PWD = $(shell pwd)
INST_DIR = /sbc2440/rootfs/root
all: clean install
install : module
rm -rf $(INST_DIR)/$(TARGET).ko
cp $(PWD)/$(TARGET).ko $(INST_DIR)
module:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o \.*.cmd \.tmp_versions $(TARGET).ko
rm -rf $(TARGET).mod.c Module.symvers modules.order
すべてが正常であればhelloを生成します.ko、これは駆動モジュールで、システムにロードするだけです.
# insmod ./hello.ko
# rmmod hello