日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

Tiny6410下的第一個(gè)Linux驅(qū)動(dòng)程序

發(fā)布者:快樂心跳最新更新時(shí)間:2024-10-08 來源: cnblogs關(guān)鍵字:Tiny6410  Linux  驅(qū)動(dòng)程序 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

Linux系統(tǒng)環(huán)境是照著友善之臂的教程搭建的


//Hello  World驅(qū)動(dòng)程序源文件


 1 #include <linux/miscdevice.h>

 2 #include

 3 #include

 4 

 5 #include

 6 #include

 7 #include

 8 #include

 9 #include

10 #include

11 #include

12 #include

13 #include

14 #include

15 #include

16 #include

17 #include

18 #include

19 #include

20 #include

21 #include

22 #include

23 #include

24 

25 #include

26 #include

27 #include gpio.h>

28 

29 #include

30 #include

31 #include

32 #include

33 #include


//驅(qū)動(dòng)讀函數(shù)

static int first_drv_open(struct inode *inode, struct file *file)

{

    printk('Hello Drivern');

    return 0;

}


//驅(qū)動(dòng)寫函數(shù)

static ssize_t first_drv_write(struct file *file, const char __user *buf, size_t count, loff_t * ppos)

{

    printk('Hello Worldn');

    return 0;

}


//定義file_operations結(jié)構(gòu)體

static struct file_operations first_drv_fops =

{

   .owner  =   THIS_MODULE, //這是一個(gè)宏,推向編譯模塊時(shí)自動(dòng)創(chuàng)建的__this_module變量

   .open   =   first_drv_open,     

    .write  =    first_drv_write,       

};


//驅(qū)動(dòng)入口函數(shù)

static int first_drv_init(void)

{

    register_chrdev(111, 'first_drv', &first_drv_fops);//向內(nèi)核注冊(cè)驅(qū)動(dòng)

    return 0;

}


static void first_drv_exit(void)

{

    unregister_chrdev(111, 'first_drv'); //卸載驅(qū)動(dòng)

}


module_init(first_drv_init);//定義一個(gè)結(jié)構(gòu)體,供內(nèi)核調(diào)用入口函數(shù)(first_drv_init--函數(shù)指針)


module_exit(first_drv_exit);//


Makefile文件


obj-m    += first_drv.o    #制定目標(biāo)名

KDIR = /opt/FriendlyARM/mini6410/linux/linux-2.6.38    #指定內(nèi)核路徑

all :

    make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm

clean :

    rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.bak *.order


//測(cè)試驅(qū)動(dòng)的程序

//測(cè)試程序要用arm-linux-gcc來編譯


 1 #include

 2 

 3 #include

 4 

 5 #include

 6 

 7 #include

 8 

 9 int main(int argc, char **argv)

10 {

11     int fd;

12     int val = 1;

13     fd = open('/dev/xxx', O_RDWR);

14     if (fd < 0)

15     {

16         printf('can't open!n');

17     }

18     

19     write(fd, &val, 4);

20     return 0;

21 }


加載內(nèi)核步驟


1、將編譯好的驅(qū)動(dòng)文件--first_drv.ko  和測(cè)試程序--firstdevtest  發(fā)送到Tiny6410上。


2、執(zhí)行命令   insmod first_drv.ko   //加載內(nèi)核驅(qū)動(dòng)     使用  cat /proc/devices  命令查看加載的驅(qū)動(dòng)


3、執(zhí)行命令   mknod /dev/xxx c 111 0  //創(chuàng)建設(shè)備節(jié)點(diǎn)   在/dev目錄下生成xxx文件   主設(shè)備號(hào)為111 次設(shè)備號(hào)為0


4、執(zhí)行命令   ./firstdrvtest     //執(zhí)行測(cè)試程序  出現(xiàn)Hello Wrold   成功!


關(guān)鍵字:Tiny6410  Linux  驅(qū)動(dòng)程序 引用地址:Tiny6410下的第一個(gè)Linux驅(qū)動(dòng)程序

上一篇:Tiny 6410的Linux學(xué)習(xí)總結(jié)!
下一篇:ARM核心及體系結(jié)構(gòu)的關(guān)系

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved