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 成功!
下一篇:ARM核心及体系结构的关系