驱动开发思路以及应用程序与驱动程序的区别
SOC:
采用的A7的核
片内设备:
1、片内控制器:
i2c控制器、spi控制器、uart控制器、gpio控制器……
2、总线:
平台总线
3、片内存储器:
irom:掉电不丢失数据
iram:掉电丢失数据
片外外设:
flash:1、dram2、nanduboot.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 //加载进内核这个模块是被应用程序所调用
如果知识点有出入还望前辈们指出,有和我一样刚入门驱动的伙计,可以一起学习探讨
驱动开发思路以及应用程序与驱动程序的区别相关推荐
- windows驱动开发7:应用程序和驱动程序的通信
应用程序和驱动程序的通信 一.基础介绍 1.1 设备与驱动的关系 设备由驱动去创建,访问一个设备,是首先得访问驱动.如果驱动在卸载的时候没有删除符号,r3下也是不能去访问设备的. 驱动程序和系统其他组 ...
- Linux USB 驱动开发(三)—— 编写USB 驱动程序
前面学习了USB驱动的一些基础概念与重要的数据结构,那么究竟如何编写一个USB 驱动程序呢?编写与一个USB设备驱动程序的方法和其他总线驱动方式类似,驱动程序把驱动程序对象注册到USB子系统中,稍后再 ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED模板驱动程序的改造:设备树
文章目录 前言 1.驱动的三种编写方法 2.怎么使用设备树写驱动程序 2.1.设备树节点要与platform_driver能匹配 2.2.修改platform_driver的源码 3.实验和调试技巧 ...
- linux摄像头内核驱动开发,FS_S5PC100平台上Linux Camera驱动开发详解(一)
说明: 理解摄像头驱动需要四个前提: 1)摄像头基本的工作原理和S5PC100集成的Camera控制器的工作原理 2)platform_device和platform_driver工作原理 3)Lin ...
- 如何正确入门Windows系统下驱动开发领域?
[作者] 猪头三 作者网站: http://www.x86asm.com 原文链接: http://blog.csdn.net/Code_GodFather/...0/5975901.aspx [贡献 ...
- windows驱动开发学习
序言] 很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从 事驱动开发时间不长也不短, ...
- Android 系统(4)---Android HAL层与Linux Kernel层驱动开发简介
Android HAL层与Linux Kernel层驱动开发简介 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. HAL:Hardw ...
- Android HAL层与Linux Kernel层驱动开发简介
Android HAL层与Linux Kernel层驱动开发简介 阅读数:5070 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. ...
- Linux下驱动开发
Linux下驱动开发 1.简介 驱动,是指驱动计算机里软件的程序.驱动程序全称设备驱动程序,是添加到操作系统中的特殊程序,其中包含有关硬件设备的信息.驱动程序是操作系统与硬件连接的桥梁. 设备 ...
最新文章
- Windows系统下MySQL安装详细教程(解决MySQL服务无法启动)
- swust oj 962
- sizebox模型下载_css 盒模型、box-sizing 学习笔记
- 亚马逊记AWS(Amazon Web Services)自由EC2应用
- OpenGL 距离场美化实例
- WebStorm 2017.1增加对Vue.js的支持
- CSS——Position定位
- php是fast_cgi模式,cpanel中的php运行方式使用fast-cgi模式的配置方法
- PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较
- Oracle增量跟新
- yii2GridView的简单使用
- 安卓rom制作教程_安卓手机TWRP_Recovery卡刷图文教程 适用于卡刷ROM,TWRP救砖
- 物联网常用天线,按照使用场景分类,主要有哪些?
- JavaScript的注释
- 主流前端-后端-数据库总结--前端框架篇
- 原来是调皮的玩耍风姑娘在敲门
- 国美易卡围绕数据云等科技,国美易卡解决问题
- 建立软件工程之动态模型(状态图)步骤
- win7下iTools Android模拟器安装与配置
- 实现一个直播视频app源码的邀请码功能
热门文章
- ImageIO javax.imageio;读取图片问题
- 每日一课 | 如何用Python编写一个Lisp解释器
- Linux如何设置开机自启动
- (草履虫级别的精讲)卷积神经网络的基本组成结构
- Aurora8B10B IP使用 -02- IP功能设计技巧
- shell实现文本处理详解
- Github上开源项目readme里好看的高大上的有趣的徽章从何而来
- 强化学习--实验一倒立摆
- android 9.0的模拟器,exagear模拟器最新版安卓9.0
- Games101 笔记 Lecture 7-9 Shading (Illumination, Shading)