单片机
返回首页

Tiny6410下的第一个Linux驱动程序

2024-10-08 来源:cnblogs

Linux系统环境是照着友善之臂的教程搭建的


//Hello  World驱动程序源文件


 1 #include

 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

28 

29 #include

30 #include

31 #include

32 #include

33 #include


//驱动读函数

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

{

    printk('Hello Drivern');

    return 0;

}


//驱动写函数

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结构体

static struct file_operations first_drv_fops =

{

   .owner  =   THIS_MODULE, //这是一个宏,推向编译模块时自动创建的__this_module变量

   .open   =   first_drv_open,     

    .write  =    first_drv_write,       

};


//驱动入口函数

static int first_drv_init(void)

{

    register_chrdev(111, 'first_drv', &first_drv_fops);//向内核注册驱动

    return 0;

}


static void first_drv_exit(void)

{

    unregister_chrdev(111, 'first_drv'); //卸载驱动

}


module_init(first_drv_init);//定义一个结构体,供内核调用入口函数(first_drv_init--函数指针)


module_exit(first_drv_exit);//


Makefile文件


obj-m    += first_drv.o    #制定目标名

KDIR = /opt/FriendlyARM/mini6410/linux/linux-2.6.38    #指定内核路径

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


//测试驱动的程序

//测试程序要用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 }


加载内核步骤


1、将编译好的驱动文件--first_drv.ko  和测试程序--firstdevtest  发送到Tiny6410上。


2、执行命令   insmod first_drv.ko   //加载内核驱动     使用  cat /proc/devices  命令查看加载的驱动


3、执行命令   mknod /dev/xxx c 111 0  //创建设备节点   在/dev目录下生成xxx文件   主设备号为111 次设备号为0


4、执行命令   ./firstdrvtest     //执行测试程序  出现Hello Wrold   成功!


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

最新器件
精选电路图
  • 非常简单的150W功放电路图

  • 一个简单的警笛电路图

  • 基于IC555的可变PWM振荡器电路

  • 优化电路板布局的简单方法

  • 分享一个电网倾角计电路

  • 使用NE555和磁簧开关的橱柜照明电路

    相关电子头条文章