前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi介绍 SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构.支持多slave模式应用,一般仅支持单Master.时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first).SPI接口有2根单向数据线,为…
前言 这篇文章是对linux驱动基础系列--linux spi驱动框架分析的补充,主要是添加了最新的linux内核里设备树相关内容. spi设备树相关信息 如之前的文章里所述,控制器的device和spi device都是通过platform_add_device和spi_register_board_info注册到内核的驱动模式中的.而最新的方式是通过设备树来实现的.以arm为例,设备树文件一般存放在arch/arm/boot/dts下,不同的平台对应不同的文件,以xilinx zynq平台为…
前言 主要是想对Linux mmc子系统(包含mmc sd sdio)驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.块设备驱动.设备模型等也不进行详细说明原理,涉及到sd/mmc/sdio协议部分也只会简单带过,因为linux内核mmc子系统里面已经实现了这些协议,我们以后并不需要重新实现这些,只需要对协议有个简单的了解,基于内核版本:2.6.35.6.如果有任何错误地方,请指出,谢谢! mmc.sd.sdio介绍 SD/MMC卡是一种大容量.性价比高…
前言 主要是想对Linux I2c驱动框架有一个整体的把控,因此会忽略协议上的某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型.sysfs等也不进行详细说明原理,涉及到i2c协议部分也只会简单带过,因为linux内核里面已经实现了该协议,我们以后并不需要重新实现这些,只需要对协议有个简单的了解.如果有任何错误地方,请指出,谢谢! 注:图片来自互联网 内核版本:2.6.35.6 I2c介绍 I2C是"Inter Integrated Circuit Bus"的缩写,中文译成…
前言 本文纯粹的纸上谈兵,我并未在实际开发过程中遇到需要编写或调试这类驱动的时候,本文仅仅是根据源码分析后的记录!基于内核版本:2.6.35.6 .主要是想对spi接口的wifi驱动框架有一个整体的把控,因此会忽略一些硬件上操作的系统,同时里面涉及到的一些驱动基础,比如数据结构.设备模式也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! 分两步来分析: 第一步:spi接口驱动分析 第二部:基于spi接口的wifi驱动分析 spi接口驱动分析 在cm-x270.c中 static void…
前言 主要是想对Linux 串口.usb转串口驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如字符设备驱动.平台驱动等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! 声明:图和个别段落(我做了小的修改)是直接从网上截取 整体概述 linux下的串口或者usb转串口驱动都是依赖linux内核提供的tty核心.tty线路规划和tty驱动,所以牵涉到很多层次,之所以有这么多层次,肯定是有它们存在意义的. 举例来说,像串口或者usb转串口的驱动,最终可以确定的是…
前言 linux驱动子系统太多了,连时钟也搞了个子系统,这导致一般的时钟芯片的驱动也会涉及到至少2个子系统,一个是时钟芯片接口子系统(比如I2c接口的时钟芯片),一个是内核给所有时钟芯片提供的rtc子系统.当然也可以自己写一个字符设备直接操作芯片然后给上层用户空间提供接口,但这种方法实在是太糟糕了,内核既然提供了,为什么不用呢!(真要这样做,请参考内核的drivers/char/rtc.c的实现) 另外: 强烈建议看内核文档Documentation/rtc.txt 里面对新旧两套实现及api有…
转自:http://blog.csdn.net/lanmanck/article/details/6895318 SPI驱动架构,以前用过,不过没这个详细,跟各位一起分享: 来自:http://blog.csdn.net/woshixingaaa/article/details/6574215 SPI协议是一种同步的串行数据连接标准,由摩托罗拉公司命名,可工作于全双工模式.相关通讯设备可工作于m/s模式.主设备发起数据帧,允许多个从设备的存在.每个从设备 有独立的片选信号,SPI一般来说是四线串…
/** ****************************************************************************** * @author    暴走的小哥哥 * @version   V1.0.0 * @date       2016-02-23 @version      V1.0.1 * @data      2016-02-25 *********************************************************…
命令行BASH基本操作 Shell 用户不能直接操作内核,所以用户操作通过shell传递给内核 shell分为两种 : GUI 图形界面 (linux一般是GNOME) CLI 命令行界面 (linux一般是BASH) BASH 提示符 # root用户 $ 普通用户 命令一般由 (命令.选项.参数) 组成. 例如 : [root@linuxabc ~ ] # uname -r 用户名 主机名 工作目录 root用户 命令 参数 使用Tab键来自动补全命令(注意:无法自动补全参数,) 按2下Ta…
/** ****************************************************************************** * @author    暴走的小哥哥 * @version   V1.0.0 * @date       2016-02-25 ****************************************************************************** * <  Beijing university…
系统启动流程 BIOS MBR : Boot Code 执行引导程序-GRUB 加载内核 执行init runlevel BIOS BIOS(basic input output system),我们称之为基本输入输出系统,一般保存在主板的BIOS芯片中 计算机启动第一个运行的就是BIOS,BIOS负责检查硬件并查找可启动设备 可启动设备在BIOS设置中进行定义,如USB/CDROM/HD等 MBR 扇区的前512字节储存MBR信息 BIOS通过MBR的最后两个字节是否是55aa来识别该设备是否…
用户基础 用户和组 每个用户都拥有一个userid 每个用户都属于一个主组,属于一个或多个附属组 每个组拥有一个groupid 每个进程以一个用户身份运行,受该用户可访问资源限制 每个可登陆用户拥有一个指定的shell 用户 userid为32位,从0开始,为了和老式系统兼容,用户id限制在60000以下 用户分为三种 -root用户(id为0的用户) -系统用户(id为1~499的用户) -普通用户(500以上) 系统中的文件都有一个所属用户及所属组 使用id命令可以显示当前用户的信息 使用p…
源代码形式 绝大多数开源软件都是直接以源代码形式发布 源代码一般会被打包成tar.gz的归档压缩文件 程序源代码需要编译成为二进制形式之后才能够运行 源代码基本编译流程 : ./configure 检测编译环境.相关库文件以及配置参数并生成makefile make 对源代码进行编译,生成可执行文件 make install 对生成的可执行文件安装到计算机中 源代码形式的软件使用起来较为麻烦,但是兼容性及可控制性较好 开源软件一般都会大量使用其他开源软件的功能,所以开源软件会有大量的依赖关系 源…
网络基础 ip编址 ip编址是一个双层编址方案(网络部分和主机部分),一个ip地址标识一个主机(或一个网卡接口) 现在应用最广泛的是IPv4编址,已经开始逐渐向IPv6编址切换 IPv4地址32位长,IPv6地址为128位长 一个IPv4地址分为两个部分:网络部分和主机部分 网络部分用来标识所属区域,主机部分用来标识该区域中的哪个主机 IPv4结构示例 [32bit (网络部分) (主机部分) ] 192.168.1.1 (点分十进制) 11000000.10101000.00000001.00…
多命令协作:管道及重定向 在Linux中,大多数命令都很简单,每个命令往往只实现一个或几个很简单功能. 我们可以通过将不同功能的命令组合起来一起使用,达到完成某个复杂功能的目的 CLI下几乎所有的命令返回的都是纯文本,纯文本形式的数据又是绝大多数命令的输入格式 命令行shell的数据流有以下定义 : 名称 说明 编号 默认 STDIN 标准输入 0 键盘 STDOUT 标准输出 1 终端 STDERR 标准错误 2 终端 命令通过STDIN接收参数,通过STDOUT输出结果或STDERR输出错误…
磁盘管理 fdisk分区工具 只支持MBR分区 fdisk命令只有root用户能用 fdisk -l 列出所有安装磁盘及分区信息 fdisk /dev/sda (操作磁盘,按m可列出帮助界面,常用的操作有:) n 新增分区(设置分区类型,起始磁盘柱面等信息) w 保存并退出 分区后可使用partprobe命令更新分区信息,或者重启Linux刷新 文件系统 操作系统通过文件系统管理文件及数据,磁盘或分区需要创建文件系统后才能被操作系统使用,创建文件系统的过程称为格式化 没有文件系统的设备称为裸 (…
1.前提 在阅读这篇博客之前,希望你对HashMap已经是有所理解的,否则可以参考这篇博客: jdk1.8源码分析-hashMap:另外你对java的cas操作也是有一定了解的,因为在这个类中大量使用到了cas相关的操作来保证线程安全的. 2.概述 ConcurrentHashMap这个类在java.lang.current包中,这个包中的类都是线程安全的.ConcurrentHashMap底层存储数据的结构与1.8的HashMap是一样的,都是数组+链表(或红黑树)的结构.在日常的开发中,我们…
前言 上一节(堆外内存与零拷贝)当中我们从jvm堆内存的视角解释了一波零拷贝原理,但是仅仅这样还是不够的. 为了彻底搞懂零拷贝,我们趁热打铁,接着上一节来继续讲解零拷贝的底层原理. 感受一下NIO的速度 之前的章节中我们说过,Nio并不能解决网络传输的速度.但是为什么很多人却说Nio的速度比传统IO快呢? 没错,zero copy.我们先抛出一个案例,然后根据案例来讲解底层原理. 首先,我们实现一个IO的服务端接受数据,然后分别用传统IO传输方式和NIO传输方式来直观对比传输相同大小的文件所耗费…
内核版本:linux2.6.32.2  硬件资源:s3c2440 参考:  韦东山SPI视频教程 内容概括:     1.I2C 驱动框架回顾     2.SPI 框架简单介绍     3.master 驱动框架         3.1 驱动侧         3.2 设备侧 4.SPI 设备驱动框架 4.1 设备册         4.2 驱动侧 5.设备驱动程序实例 1.I2C 驱动框架回顾     在前面学习 I2C 驱动程序的时候我们知道,I2C 驱动框架分为两层,一层是控制器驱动程序…
1.Linux主机驱动和外设驱动分离思想(I2C驱动里有) SPI驱动总线架构:SPI核心层(x),SPI控制器驱动层(x),SPI设备驱动层(√).前面两个设备驱动搞明白了可以去看 2.教程中介绍:SPI函数接口(API): 简单介绍SPI协议,硬件原理(4412datasheet) 3.教程中介绍:SPI函数接口(API): 简单介绍SPI协议,硬件原理(4412datasheet) SDI(数据输入),SDO(数据输出),SCLK(时钟),CS(片选) SPI(rfid模块)的硬件基础知识…
目录 Linux网络基础 一.网卡和数据包的转发 1.收包流程 二.多网卡bonding 三.SR-IOV 四.DPDK 五.TUN/TAP 六.Linux bridge 和VLAN 七.TCP/IP协议栈 八.Iptables 九.QOS Linux网络基础 一.网卡和数据包的转发 1.收包流程 ①.网卡接受报文,根据设置的不同模式及目的mac地址来判断是否接受该报文 网卡的模式有混杂模式(Promiscuous Model).直接模式(Direct Model).组播模式(MultiCast…
Linux入门基础篇 Linux诞生 Linux发行版本说明 Linux官方网站 Linux内核官方网站 比较有名的Linux发行版 虚拟机(Virtual Machine),一个虚拟的系统,安装在系统中的系统 Linux与Windows的不同 Linux基本命令入门 Windows命令行入门(搜索cmd查找) Cygwin安装和使用 Linux环境下补充 用户组 所有者 文件所在组 其他组 文件夹权限 改变文件夹权限 Linux诞生 Linux操作系统诞生于1991年10月5日(这是第一次正式…
linux系统优化基础 tags: linux 优化 kingle---### 1, 查看centos版本:cat etc/redhat-release 看看centos架构信息:uname -m 查看内核信息:uname -r -r 显示内核信息 -m 显示系统架构信息 -a 显示系统所欲信息 -n 网络节点主机### 2, ctrl+ L 清屏操作 ctrl+d 退出当前用户 ctrl + c 结束操作 ### 3, 创建用户 useradd 创建密码 passwd 免交互设置密码 echo…
Linux之基础系统优化 Linux基础系统优化 >>> https://www.cnblogs.com/pyyu/p/9355477.html Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. ifconfig 查询.设置网卡和ip等参数 ifup,ifdown    脚本命令,更简单的方式启动关闭网络 ip 符合指令,直接修改上述功能 在我们刚装好linux的时候,需要用xshell进行远程连接,那就得获取ip地址,…
Linux系统基础(一) Linux的基本原则: 由目的单一的小程序组成,组合小程序完成复杂任务: 一切皆文件: 配置文件保存为纯文本格式. 1.shell 1.1 shell简介 Shell俗称壳(用来区别于核),是指"为使用者提供操作界面"的软件(命令解析器).它类似于DOS下的command.com和后来的cmd.exe.它接收用户命令,然后调用相应的应用程序. 常见的shell有两种,一种是图形界面,即GUI,一种是命令行终端,即CLI. 常用的GUI:Graphic User…
版本:v1.2   Crifan Li 摘要 本文主要介绍了如何在嵌入式Linux系统运行的时候,进行升级整个Linux系统,包括uboot,kernel和rootfs.以及简介Linux中的已有的通用的Nor Flash驱动m25p80,和简介mtd util以及相关工具mtdinfo,flash_erase,flash_eraseall,nanddump,nandwrite等的基本用法. 本文提供多种格式供: 在线阅读 HTML HTMLs PDF CHM TXT RTF WEBHELP 下…
linux 串行通信接口驱动框架 在学习linux内核驱动时,不论是看linux相关的书籍,又或者是直接看linux的源码,总是能在linux中看到各种各样的框架,linux内核极其庞杂,linux各种框架理解起来并不容易,如果直接硬着头皮死记硬背,意义也不大. 博主学习东西一直秉持着追本溯源的态度,要弄清一个东西是怎么样的,如果能够了解它的发展,了解它为什么会变成这样,理解起来就非常简单了.抓住主干,沿着线头就可以将整个框架慢慢梳理清楚. 从i2c开始 在嵌入式中,不管是单片机还是单板机,i2…
本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动就直接崩溃了,找不到原因...刚好手上有一个enc28j60的网卡模块,于是就着手移植enc28j60的驱动. 其实移植enc28j60的驱动也十分简单,网上有现成的,只需要分配一些硬件资源即可. 由于我的内核版本老到掉牙,没有自带enc28j60的驱动,只能在网上找一个: enc28j60.c http://git.ti.com/ti-linux-kernel/ti-li…
2012-01-07 22:21:29 效果图: 理论学习后,主要是linux中spi子系统设备框架的了解后,主控制器与设备分离的思想,那么我要开始动手了. 1,  make menuconfig添加spi配置 2,platform_driver及platform_device数据结构都有了.于是在mach-tq2440.c中tq2440_devices[]结构添加里         &s3c_device_spi1,//by apple 3,接着开始make zImage. 出错,发现串口信息…