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     //加载进内核这个模块是被应用程序所调用

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

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

  1. windows驱动开发7:应用程序和驱动程序的通信

    应用程序和驱动程序的通信 一.基础介绍 1.1 设备与驱动的关系 设备由驱动去创建,访问一个设备,是首先得访问驱动.如果驱动在卸载的时候没有删除符号,r3下也是不能去访问设备的. 驱动程序和系统其他组 ...

  2. Linux USB 驱动开发(三)—— 编写USB 驱动程序

    前面学习了USB驱动的一些基础概念与重要的数据结构,那么究竟如何编写一个USB 驱动程序呢?编写与一个USB设备驱动程序的方法和其他总线驱动方式类似,驱动程序把驱动程序对象注册到USB子系统中,稍后再 ...

  3. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED模板驱动程序的改造:设备树

    文章目录 前言 1.驱动的三种编写方法 2.怎么使用设备树写驱动程序 2.1.设备树节点要与platform_driver能匹配 2.2.修改platform_driver的源码 3.实验和调试技巧 ...

  4. linux摄像头内核驱动开发,FS_S5PC100平台上Linux Camera驱动开发详解(一)

    说明: 理解摄像头驱动需要四个前提: 1)摄像头基本的工作原理和S5PC100集成的Camera控制器的工作原理 2)platform_device和platform_driver工作原理 3)Lin ...

  5. 如何正确入门Windows系统下驱动开发领域?

    [作者] 猪头三 作者网站: http://www.x86asm.com 原文链接: http://blog.csdn.net/Code_GodFather/...0/5975901.aspx [贡献 ...

  6. windows驱动开发学习

    序言]  很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从 事驱动开发时间不长也不短, ...

  7. Android 系统(4)---Android HAL层与Linux Kernel层驱动开发简介

    Android HAL层与Linux Kernel层驱动开发简介 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. HAL:Hardw ...

  8. Android HAL层与Linux Kernel层驱动开发简介

    Android HAL层与Linux Kernel层驱动开发简介 阅读数:5070 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. ...

  9. Linux下驱动开发

    Linux下驱动开发 1.简介   驱动,是指驱动计算机里软件的程序.驱动程序全称设备驱动程序,是添加到操作系统中的特殊程序,其中包含有关硬件设备的信息.驱动程序是操作系统与硬件连接的桥梁.   设备 ...

最新文章

  1. Windows系统下MySQL安装详细教程(解决MySQL服务无法启动)
  2. swust oj 962
  3. sizebox模型下载_css 盒模型、box-sizing 学习笔记
  4. 亚马逊记AWS(Amazon Web Services)自由EC2应用
  5. OpenGL 距离场美化实例
  6. WebStorm 2017.1增加对Vue.js的支持
  7. CSS——Position定位
  8. php是fast_cgi模式,cpanel中的php运行方式使用fast-cgi模式的配置方法
  9. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.23. 行和数组比较
  10. Oracle增量跟新
  11. yii2GridView的简单使用
  12. 安卓rom制作教程_安卓手机TWRP_Recovery卡刷图文教程 适用于卡刷ROM,TWRP救砖
  13. 物联网常用天线,按照使用场景分类,主要有哪些?
  14. JavaScript的注释
  15. 主流前端-后端-数据库总结--前端框架篇
  16. 原来是调皮的玩耍风姑娘在敲门
  17. 国美易卡围绕数据云等科技,国美易卡解决问题
  18. 建立软件工程之动态模型(状态图)步骤
  19. win7下iTools Android模拟器安装与配置
  20. 实现一个直播视频app源码的邀请码功能

热门文章

  1. ImageIO javax.imageio;读取图片问题
  2. 每日一课 | 如何用Python编写一个Lisp解释器
  3. Linux如何设置开机自启动
  4. (草履虫级别的精讲)卷积神经网络的基本组成结构
  5. Aurora8B10B IP使用 -02- IP功能设计技巧
  6. shell实现文本处理详解
  7. Github上开源项目readme里好看的高大上的有趣的徽章从何而来
  8. 强化学习--实验一倒立摆
  9. android 9.0的模拟器,exagear模拟器最新版安卓9.0
  10. Games101 笔记 Lecture 7-9 Shading (Illumination, Shading)