初步认识驱动开发

        所谓的驱动开发就是在操作系统的基础上实现驱动程序。

一、驱动开发的环境:

        1、在ubuntu中配置环境    

                内核实现、文件系统实现、驱动实现---ubuntu中实现

                gcc-4.6.4----->arm-none-linux-gnueabi-gcc

                通过tftp提供uImage和.dtb----提供内核

                通过nfs提供文件系统rootfs

        2、板子运行环境配置(三星exynos4412 ARM裸板)

                1、板子上运行uboot引导程序

                2、配置uboot环境变量
                            ipaddr
                            serverip
                            gatewayip
                            支持网络--uboot
                            bootcmd----uboot自启动模式自动执行

                            bootcmd tftp 41000000 uImage \; tftp 42000000 xxx.dtb\; bootm 41000000 - 42000000
                            bootargs----uboot提供给操作系统内核,内核知道怎么执行----执行bootm时
                            bootargs /dev/nfs rootfs=xxxxx:/xxxxx/rootfs  rw console=ttySAC2,115200 init=/linuxrc ip=xxxxxx
                        
                            3、uboot通过tftp下载内核和设备树
                            tftp    内存地址    uImage
                            tftp    内存地址    .dtb

                            4、uboot运行启动内核
                            bootm    内核地址    -    设备树地址
                    需要有内核和文件系统:

                            a、内核编译
                            步骤:
                            1、设置交叉编译环境
                            vim    Makefile

                            ARCH            ?= arm
                            CROSS_COMPILE   ?= /home/ubuntu/tools/gcc-4.6.4/bin/arm-none-linux-gnueabi-

                            2、选择soc,找到当前硬件对应的soc芯片,必须挑选适配于当前硬件
                            make    exynos_defconfig
                            生成.config------编译配置(哪些要编译,哪些不编译,内核有哪些功能)

                            3、针对默认的soc芯片进行裁剪适配于当前硬件
                            make    menuconfig

                            4、编译内核
                            make    uImage

                            5、编译设备树:描述设备信息
                            找最相近的外设设备树,进行修改变成当前硬件设备的设备信息描述
                            以默认的dts作为参考,变为我们自己的dts

                            cp linux-3.14/arch/arm/boot/dts/exynos4412-origen.dts linux-3.14/arch/arm/boot/dts/exynos4412-fs4412.dts
                            vim linux-3.14/arch/arm/boot/dts/Makefile---添加编译
    
                            6、编译设备树
                            make dtbs

二、驱动开发        

        1、编写驱动代码
                用什么工具写代码
                vim(任何编辑器)
                查看代码工具(我们要知道Linux内核的函数原型(定义),才知道如何调用)
        source insight---查看代码工具

                安装source insight工具
                根据文档提示安装软件
                打开软件提示错误
                https://blog.csdn.net/zanda_/article/details/82916744
                要使用source insight工具用作查看内核代码:

                在windows的文件夹下解压linux内核代码

                a.设置新工程用作查看
                    project--->new project
                    在第一个对话框中,第一个文本框(行编辑器),输入工程的名字
            
                    在第二个对话框中,第一个本文框中选择刚解压的Linux内核源码目录(顶层linux-3.14),点击ok

                    在第三个对话框中,在对话框中选择要查看的目录/文件
                    需要选择的目录文件:
                    include
                    init
                    kernel
                    arch/arm/kernel
                    arch/arm/include/asm
                    driver/base
                    driver/char
                     driver/i2c
                    driver/spi
                    fs/char_dev.c
                    点击close关闭

                    重新选择project---->open project
                    选择刚才创建的工程名
                    ok
                    如果提示同步,则选择确认进行同步

        2、写驱动

                驱动代码必须有4部分:

        //1、头文件#include #include //2、驱动入口函数的声明,在内核加载驱动时,执行哪个函数;在内核卸载驱动时,执行哪个函数//声明:加载时的入口声明module_init(hello_init);//声明:卸载时的入口声明module_exit(hello_exit);//3、加载函数、卸载函数的实现//加载函数的实现:当内核加载驱动(内核执行这个驱动时,就会调用的函数)static int __init hello_init(void){return 0;}//卸载函数的实现:当内核卸载驱动(内核删除这个驱动时,就会调用的函数)static void __exit hello_exit(void){}//4、协议选择GPLMODULE_LICENSE("GPL");

        Linux内核如何使用模块驱动 
        加载:
        insmod    驱动程序路径.ko
        查看:
        lsmod:查看当前已经加载的驱动模块        
 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部