------在android模擬器和開發板上進行測試驅動模組
第一步新增邏輯功能部分**
1.新增建立檔案部分**,新增後的hello.c的**如下:
#include
#include
#include
#include
#include
#include
#define device_name "myfirstdriver"
//定義裝置檔案
static
struct file_operations dev_fops =
;static
struct miscdevice misc =
;//linnux驅動的裝載函式
static
int__
init hello_drive_init
(void)
//linux驅動的解除安裝函式
static
void
__exit
hello_drive_exit
(void)
//註冊裝載函式
module_init(hello_drive_init);
//註冊解除安裝函式
module_exit(hello_drive_exit);
重新編譯root@wayy-optiplex-9020:/usr/marsboard-a20-android-4.2.2-sdk-v2.0/lichee/linux-3.3/drivers/hello# make -c /usr/src/linux-headers-3.13.0-86-generic/ m=/usr/marsboard-a20-android-4.2.2-sdk-v2.0/lichee/linux-3.3/drivers/hello
解除安裝掉之前載入的和hello驅動
#rmmod hello
#insmod hello.ko
進入檔案目錄下察看檔案
#ls /dev/myfirstdriver
顯示結果如下:
/dev/myfirstdriver 證明在相關目錄下已經生成了檔案
檢視裝置號 #ls -al /dev/myfirstdriver
得到結果:crw------- 1 root root 10, 56 5月 20 15:46 /dev/myfirstdriver
2、新增實際的邏輯**:
新增後的hello.c的**如下:
#include
#include
#include
#include
#include
#include
#define device_name "myfirstdriver"
//定義裝置檔案
//儲存讀寫陣列
static
unsigned
char mem[1000];
//儲存讀寫字串的數量
static
ssize_t char_count = 0;
//處理裝置檔案讀動作
static ssize_t hello_drive_read
(struct file *file, char
__user *buf, size_t count, loff_t *ppos)
printk("read:count:%d\n",(int)count);
printk("read:char_count:%d\n",(int)char_count);
char_count = 0;
return read_count;
}//處理裝置檔案寫動作
static ssize_t hello_drive_write
(struct file *file, const
char
__user *buf,size_t count, loff_t *ppos)
mem[count] = '\0';
printk("write:char_count:%d\n",(int)char_count);
return char_count;
}static
struct file_operations dev_fops =
;static
struct miscdevice misc =
;//linnux驅動的裝載函式
static
int__
init hello_drive_init
(void)
//linux驅動的解除安裝函式
static
void
__exit
hello_drive_exit
(void)
//註冊裝載函式
module_init(hello_drive_init);
//註冊解除安裝函式
module_exit(hello_drive_exit);
重新編譯:#make -c /usr/src/linux-headers-3.13.0-86-generic/ m=/usr/marsboard-a20-android-4.2.2-sdk-v2.0/lichee/linux-3.3/drivers/hello/
解除安裝驅動:#rmmod hello
寫入內容:#echo hellooo > /dev/myfirstdriver
3.檢視效果
獲得內容:#cat /dev/myfirstdriver
顯示內容:hellooo
檢視日誌:#dmesg
顯示結果:
[167636.665140] read:count:32768
[167636.665143] read:char_count:0
第二步匯入android模擬器進行測試
adb -s 20080411 push hello.ko /data/local1.修改核心配置
編譯核心
使用goldfish編譯hello驅動(goldfish編譯已經成功,但是呼叫emulator 命令 **zimage暫未成功)
第三步匯入android開發板進行測試
1.在解壓下的marsboard的安卓**路徑下建立hello驅動資料夾
#cd /usr/marsboard-a20-android-4.2.2-sdk-v2.0/lichee/linux-3.3/drivers
#mkdir hello
把hello.c和makefile拷貝到hello資料夾下,命令省略。
進入/usr/marsboard-a20-android-4.2.2-sdk-v2.0/lichee/linux-3.3/drivers路徑 #cd /usr/marsboard-a20-android-4.2.2-sdk-v2.0/lichee/linux-3.3/drivers
修改makefile,在末尾新增:obj-m += hello/ //(-m表示以模組化編譯,不編譯進核心)
進入到lichee路徑下面
#./build.sh -p sun7i_android
編譯完成之後會在hello資料夾下生成.o和.ko格式的檔案
2.使用adb在開發板下進行測試
把開發板通過usb線連線至ubuntu電腦
新開啟乙個終端(ctrl+alt+t)
#adb devices
得到開發板的裝置號:20080411
將hello.ko傳至marsboard開發板
進入hello資料夾的路徑後# adb -s 20080411 push hello.ko /data/local
裝載hello.ko驅動
#insmod hello.ko
顯示除錯資訊
# dmesg
得到結果:
第乙個linux 驅動
以前看過很多次linux相關的資料,一直沒親自動手寫,今天通過半天努力,終於完成了乙個自己的linux小驅動 hello.c include include module license dual bsd gpl static int hello init void static void hell...
第乙個驅動之字元裝置驅動(二)mdev
mdev是busybox提供的乙個工具,用在嵌入式系統中,相當於簡化版的udev,作用是在系統啟動和熱插拔或動態載入驅動程式時,自動建立裝置節點。檔案系統中的 dev目錄下的裝置節點都是由mdev建立的。在載入驅動過程中,根據驅動程式,在 dev下自動建立裝置節點。前面的部落格實現了第乙個版本,但是...
第乙個驅動之字元裝置驅動(二)mdev
mdev是busybox提供的乙個工具,用在嵌入式系統中,相當於簡化版的udev,作用是在系統啟動和熱插拔或動態載入驅動程式時,自動建立裝置節點。檔案系統中的 dev目錄下的裝置節點都是由mdev建立的。在載入驅動過程中,根據驅動程式,在 dev下自動建立裝置節點。前面的部落格實現了第乙個版本,但是...