驱动开发思路以及应用程序与驱动程序的区别

SOC:

采用的A7的核

片内设备:

1、片内控制器:

i2c控制器、spi控制器、uart控制器、gpio控制器……

2、总线:

平台总线

3、片内存储器:

irom:掉电不丢失数据
iram:掉电丢失数据

片外外设:

flash:
    1、dram
    2、nand
        uboot.bin---zImage/uImage---rootfs
其他外设:
    按键、灯……

一个完整的驱动运行流程:

一、uboot.bin

1、板子一上电irom(掉电不丢失数据)内的程序就开始运行,去读取nand flash内的数据,从0地址开始读取
2、提前将uboot.bin烧录到nand flash中去
3、irom在nand flash中读取到uboot.bin的第一部分(由于uboot.bin比较大,会分成2个部分),同时将读取到的数据加载到iram(掉电丢失数据)中运行,运行过程中,会在外部dram中初始化第一部分的uboot.bin,随后再去读取第二部分,过程和第一部分一样,进而完成整个uboot的初始化
4、随后引导内核

二、内核zImage/uImage

随后uboot引导内核:
两种方式:
方式1
事先内核镜像烧录nand flash中,uboot直接去nand flash中读取内核

方式2:
网络方式下载tftp服务(通过网线)
tftp下载内核到dram中的0x40008000,在此运行内核
最终内核是在此运行

**为什们下载地址是从0x40008000开始?**
因为dram中前面还有uboot
 开发一般采用方式二,为什们采用方式二:
由于内核频繁修改,修改后,每次都要烧录,效率太低故采用方式二

三、内核运行完之后,紧接着会挂在根文件系统rootfs

挂在方式:通过nfs服务挂在网络文件系统

四、前期工作准备完毕后,开发(分两种情况)

1、应用开发

由于pc机x86架构芯片arm架构,架构不一样,导致指令集不一样,所以需要交叉编译
应用程序直接放在文件系统里面,由于文件系统是共享的,所以将他放在文件系统里面, 在板子上就可以直接看到这个应用程序,也就可以直接运行了
应用程序只需在文件系统中直接运行

2、内核开发

驱动程序本身是属于内核源码的,但是由于为了开发效率,我们一般会采用以内核模块的形式开发不直接编译进内核,而是单独编译成xx.ko文件,最后要用他的时候也还是要放到内核中去用。
怎么做呢?
通过内核的命令:insmod xx.ko //加载到内核中去
通过命令将它安装到系统,应用层就可以直接这个驱动的接口
例:
就比如我们平时用的U盘,插到电脑,会自动安装驱动到windows里面

应用程序与驱动的程序的区别

1、应用程序----是一个独立完整的程序,由main函数,从main开始运行
2、驱动程序----只是内核的一个模块没有main函数,
目的:应用程序提供操作硬件(设备)的函数接口

应用程序开发思路:

在这里插入图片描述

驱动程序开发思路:

在这里插入图片描述

static int __init xxx_init(void)	//为驱动函数入口
static void __exit xxx_exit(void)	//驱动函数的出口

驱动程序编译之后不是可执行程序,而是一个内核模块,随后通过内核命令:
加载命令:
insmod hello_drv.ko		//加载进内核

这个模块是被应用程序所调用

如果知识点有出入还望前辈们指出,有和我一样刚入门驱动的伙计,可以一起学习探讨

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值