在线问答
直播中

陈星

10年用户 4705经验值
擅长:电源/新能源 处理器/DSP 控制/MCU
私信 关注

【OK210试用体验】linux字符驱动框架

   一、驱动程序框架:
        

        1.编写程序               led_writer(struct file *file, const char __user *buf, size_t counr, loff_t *ppos)

        2.定义相关结构体     static struct file_operations
led={  .ower = THIS_MODULE,    .write = led_write}

        3.注册驱动程序        register_chdev
(
major
, "led", &led)

           卸载驱动程序      
un
register_chdev(major, "led")

        4.驱动入口函数        frist_init(
register_chdev
)

          驱动出口函数         
frist_exit
(
unregister_chdev)

        5.修饰入口函数        module_init(
frist_init
)   

           修饰出口函数         
module_exit(
frist_exit
)

        6.使用makefile进行编译



    二、编译一个测试驱动



        1.编写.c程序

            #include "linux/init.h"

            #include "linux/module.h"



            static int hello_init(void)
            {
                    printk(KERN_ALERT"Hello World linux-driver-modulen");
                    return 0;
            }
            static int hello_exit(void)
            {
                    printk(KERN_ALERT"Goodbye linux-driver-modulen");
                    return 0;
            }
            module_init(hello_init);        安装驱动
            module_exit(hello_init);       卸载驱动

            MODULE_LICENSE("GPL");

            

        2.编写Makefile    注:文件名一定要为  Makefile  M不能为小写

            ARCH=arm    内核

            CROSS_COMPILE=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-    交叉编译工具地址

            APP_COMPILE=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

            obj-m := app.o    编译不链接

            KDIR := /usr/android-kernel-samsung-dev/    内核目录

            PWD := $(shell pwd)    当前文件夹地址

            default:

                    make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) mod ules    编译生成驱动模块,即.ko文件

            app:app

                    $(APP_COMPILE)gcc -o app app.c    交叉编译.c文件

            clean:

                    $(MAKE) -C $(KDIR) M=$(PWD) clean    清除



        3.安装与卸载驱动

            安装驱动:insmod app.ko   打印出:“Hello World linux-driver-module”

            查看驱动信息:lsmod app/app.ko  app 583 0 - Live 0xbf018000

            卸载驱动:rmmod app/app.ko  需创建 /lib/modules/内核版本 目录



          这里的驱动没有创建节点,所以没有应用程序来调用。


更多回帖

发帖
×
20
完善资料,
赚取积分