上一節寫的led驅動程式包含了很多頭檔案,這些頭檔案的支持依賴于內核,所以要測驗這個驅動程式,首先要編譯內核,

- kernel 版本:4.19.0-rc3
- kernel 編譯工具:arm-linux-gnueabi-gcc 4.9.4

- uboot:1.1.6(選單頁支持下載設備樹t)
- uboot 編譯工具:arm-linux-gnueabi-gcc 4.9.4
- APP編譯工具:arm-linux-gcc 4.3.2
在內核原始碼的driver目錄下創建一個001_led_drv_traditional檔案夾,編譯C檔案和測驗程式,其中.c檔案的Makefile如下:

然后使用nfs掛載,
首先設定一下板子的ip,我的虛擬機IP固定是192.168.0.103,在同一個網段里給板子分配一個沒用過的IP即可,這里設定的是192.168.0.100,設定完成后ping一下虛擬機,可以看到成功連上了,

將虛擬機的 /work/nfs_root 檔案夾掛載到開發板的 /mnt 目錄下:
mount -t nfs -o nolock,vers=2 192.168.0.103:/work/nfs_root /mnt

然后將檔案推到掛載目錄下,insmod ko檔案,可以看到出現led設備,

然后執行./ledtest on和off,可以發現小燈隨著指令亮滅,同時每次執行完指令都會執行一遍release函式,


這是因為測驗函式依次執行open和write函式,然后return 0結束運行,
即時沒有close函式,當這個應用程式退出后,內核也會呼叫該應用程式release函式來釋放資源,
int main(int argc, char **argv)
{
int fd;
unsigned char val = 1;
fd = open("/dev/led", O_RDWR);
if (fd < 0)
{
printf("can't open!\n");
return 0;
}
if (argc != 2)
{
printf("Usage :\n");
printf("%s <on|off>\n", argv[0]);
return 0;
}
if (strcmp(argv[1], "on") == 0)
{
val = 1;
}
else
{
val = 0;
}
write(fd, &val, 1);
// close(fd);
return 0;
}
PS:搭環境編譯測驗搞了好久,確實不容易,后面進度可以快一點了吧,,QAQ
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298760.html
標籤:其他
