驱动测试时,linux驱动常以模块方式插入内核。
应包含头文件:linux/kernel.h,linux/module.h

设备驱动的一般结构:
Soc(主芯片->设备控制器->外设引脚)
--------------------------------
设备相关芯片(DM9000/MM8960/MAX3232)
--------------------------------
设备插接件(RJ45/Speaker/DB9)

系统中的每个设备由“设备特殊文件”来代表,通过/dev访问驱动程序,/dev目录下的文件可用来访问驱动程序。
/dev/ttySAC0  板上串口设备
/dev/tty0-6   虚拟控制台
/dev/zero     软件设备
/dev/null     空设备
/dev/urandom  随机数字
/dev/dsp      音频声卡

常用设备文件操作方法:
1)重定向符 > 写设备
echo data > /dev/ttyS0
cat sunflower.bmp > /dev/fb0
cat ringing.wav > /dev/dsp
2)cat 读设备
cat /dev/ttyS0 (pc linux)
cat /dev/ttySAC0 (板子 linux)
3)dd 读写设备
将文件写入串口中
dd if=1.txt of=/dev/ttySAC0
写入0x00到2.txt中,每次读写的数据量是512个字节,写入2次
dd if=/dev/zero of=2.txt count=2 bs=512
随即显示
dd if=/dev/urandom of=/dev/fb0
播放1.wav文件
dd if=1.wav of=/dev/dsp

MMU/CORE/SOC/SDRAM之间的关系
ProcessCore = ALU + Register(PC, R0-R15, CPSR)
CORE = ProcessCore + MMU + CP15 + cache
SOC = CORE + SFR + iROM + iRAM
SOC <=bus=> SDRAM

CP15为协处理器,管理MMU

无论在用户应用程序,还是内核模块中,打印出的变量(全局和局部)、函数名都是虚拟地址。
裸板编程中用到的地址,从数据手册中得到的地址,都是没有启用mmu的,代表的都是物理地址。
LDR/STR命令中,涉及到的内存地址,从本质上说,都是虚拟地址。
当MMU没有启用时,上面的虚拟地址等于物理地址;如果启用MMU,这些虚拟地址就会映射为不同的物理地址。

内核空间和用户空间:
1.x86 linux内存设计
  0-3G用户空间(0x0-0xC0000000)
  3G-4G系统空间(0xC0000000-0xFFFFFFFF)
2.ARM linux内存设计
  0-(3G-16M) 用户空间(0x0-0xBF000000)
  (3G-16M)-3G 内核模块(0xBF000000-0xC0000000)
  3G-4G 系统空间

linux驱动用虚拟地址,而不是物理地址,其运行于内核态(3G-4G)。
物理地址映射为虚拟地址,采用mmap()或ioremap()函数。
#include <asm/io.h>
volatile unsigned int *V_ULCON0;
volatile unsigned int *V_UCON0;
V_ULCON0 = ioremap(0xE2900000, 4);
V_UCON0 = ioremap(0xE2900004, 4);

//****紧挨着的物理地址可同时映射
volatile unsigned int *V_ULCON0;
volatile unsigned int *V_UCON0;
volatile unsigned char *v_base;

v_base = ioremap(0xE2900000, 8);
V_ULCON0 = v_base;
V_UCON0 = v_base + 4;

V_ULCON0 = 0x3;
V_UCON0 = 0x5;

驱动卸载时要解除映射。
iounmap(v_base);

常用网站:
http://lxr.free-electrons.com/在线阅读linux内核源码,查找内核符号的定义和引用。
http://kernelbook.sourceforge.net/kernel-api.html/查找哪些函数可以在模块中使用。

交互式传输文件方法:
1.串口(通过xmodem协议)
  开发板上输入rx hello
  pc机:ctrl+a z =>s发送文件(minicom)
  minicom的设置采用命令:sudo minicom -s
2.nfs开发板上挂在共享文件
  mount -t nfs -o tcp,nolock  192.168.103.200:/home/akaedu/rootfs /mnt
  注:192.168.103.200为PC ip地址。
3.ftp下载
  ftp登录后put上传。
  ftp登录后PC机上目录切换采用命令lcd。

ftp脚本:
ftp.sh

#! /bin/sh
DIR=$1
FILE=$2
ftp -i -in <<!
open 192.168.0.200 21
user username password
cd /home
lcd $DIR
binary
put $FILE
bye
!

应用:
./ftp.sh para1 para2
参数para1为文件所在目录
参数para2为文件名
./ftp.sh ./   hello

可将ftp.sh移动至/bin目录下,方便操作。

driver基础的更多相关文章

  1. 使用DataFlow表达ControlFlow的一些思考

    一.控制流 从接触面向过程语言开始,使用控制流编程的概念已是司空见惯. if (condition) { // do something } else { // do something else } ...

  2. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  3. 将Cesium ion上的3D Tiles和Bing imagery应用到osgEarth

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Pelican Mapping 激动的宣布支持加载Cesium ...

  4. [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver

    [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & Driver 目录 [源码解析] 深度学习分布式训练框架 horovod (4) --- 网络基础 & ...

  5. mongodb shell和Node.js driver使用基础

    开始: Mongo Shell 安装后,输入mongo进入控制台: //所有帮助 > help //数据库的方法 > db.help() > db.stats() //当前数据库的状 ...

  6. JSP | 基础 | 加载类失败:com.mysql.jdbc.Driver

    两个原因: 1. 连接数据库需要的jar包没有导入Tomcat的lib库中 解决方案: 打开Tomcat的安装目录下的lib文件夹,把jar包拖进lib库后,重启tomcat服务器 2.  mysql ...

  7. 【linux基础err】NVIDIA-SMI has failed because it could't communicate with the NVIDIA driver.

    问题 安装nvidia driver和cuda关机重启之后出现不能进入系统的问题,进入命令行模式使用nvidia-smi检查驱动的问题. nvidia-smi NVIDIA-SMI has faile ...

  8. 设备驱动基础学习--platform driver简单实现

    platform是一条虚拟的总线.设备用platform_device表示,驱动用platform_driver进行注册,Linux platform driver机制和传统的device drive ...

  9. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题

    现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...

随机推荐

  1. apk打包

    1.在导航栏中选择Builder->Generate Signed Apk 2.新建点击Creat new... 3.注意路径后面写apk的名字(这个名字将会显示在手机软件的下方)

  2. [转] C/C++中printf和C++中cout的输出格式

    原文地址 一. Printf 输出格式 C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型,其中方括号[]中的项为可选项.各项的意义介绍如下:1.类型类型字符用以表示输出数 ...

  3. 阿里p6面试

    电话面试: 第一次面试关注的问题,1)java基础: jvm 内存回收,垃圾回收基本原理,Java并发包的线程池,Java8的新特性.nio 堆排序.conrenthashmap , concurre ...

  4. 特征选取方法PCA与LDA

    一.主成分分析(PCA)介绍 什么是主成分分析?   主成分分析是一种用于连续属性降维的方法,把多指标转化为少数几个综合指标. 它构造了原始属性的一个正交变换,将一组可能相关的变量转化为一组不相关的变 ...

  5. 渗透笔记0x00

    今天朋友在入侵织梦的网站系统,通过最新的Exp获得了织梦后台的账号和密码 账号:admin 密码:abc123456 但是,找来找去找不到后台,就让我提权试试. 我看了下:http://pxc.nci ...

  6. MySQL数据库分片技术调研

    将这段时间了解的MySQL分片技术和主从复制只是整理清楚画了思维导图记录一下,希望能给需要的人一些帮助 P.S.:个人整理,可能会有错误之处,还望指出~ 要解决的问题 1.海量数据的操作超出单表.单库 ...

  7. Solr-5.3.1 dataimport 导入mysql数据

    最近需要计算制造业领域大词表每个词的idf,词表里一共九十多万个词,语料一共三百七十多万篇分词后文献.最开始尝试用程序词表循环套语料循环得到每个词的idf,后来又尝试把语料存入mysql然后建立全文索 ...

  8. [Typescript] Improve Readability with TypeScript Numeric Separators when working with Large Numbers

    When looking at large numbers in code (such as 1800000) it’s oftentimes difficult for the human eye ...

  9. 阿里云部署Java web项目初体验

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了怎样在阿里云上安装JDK.Tomcat以及其配置过程. 最后以一个实例来演 ...

  10. Spring AOP实现拦截转发控制

    import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import ...