嵌入式开发
文章平均质量分 86
zqixiao_09
这个作者很懒,什么都没留下…
展开
-
route命令详解与使用实例
1. 使用背景需要接入两个网络,一个是部署环境所在内网环境,这个环境是上不了外网, 外网环境很可能是一个无线网络。如果两者都连接上,很可能导致有一方不能起作用,即外网或内网上不了,常常需要使用繁琐的“禁用网络连接”、“启用网络连接”的操作来进行内外网的切换,甚是麻烦。为了解决这个问题,可以使用route命令来使得同时内外网都可用。2. rou原创 2016-11-29 22:56:35 · 28508 阅读 · 3 评论 -
Linux 字符设备驱动结构(二)—— 自动创建设备节点
上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号。第一种是使用mknod手工创建:mknod filename type major minor第二种是自动创建设备节点:利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置。在驱动初始化代码里调用class_create为该设备创建一个原创 2016-03-10 20:46:35 · 19515 阅读 · 3 评论 -
Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析
解析完 open、close、read、write 四个函数后,终于到我们的 ioctl() 函数了一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。下面是其源代码定义:函数名: ioctl功 能: 控制I/O设备用 法: int原创 2016-03-11 22:55:02 · 15531 阅读 · 5 评论 -
Linux 字符设备驱动开发基础(五)—— ioremap() 函数解析
一、 ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:a -- I/O 映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或原创 2016-03-11 23:26:18 · 34946 阅读 · 2 评论 -
Linux 字符设备驱动开发基础(三)—— read()、write() 相关函数解析
我们在前面讲到了file_operations,其是一个函数指针的集合,用于存放我们定义的用于操作设备的函数的指针,如果我们不定义,它默认保留为NULL。其中有最重要的几个函数,分别是open()、read()、write()、ioctl(),下面分别对其进行解析 下面先写一下打开和关闭设备的函数 int (*open) (struct inode *, struc原创 2016-03-11 22:16:23 · 20662 阅读 · 6 评论 -
Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动
编写驱动的第一步仍是看原理图: 可以看到,该蜂鸣器由 GPD0_0 来控制 ,查手册可知该I/O口由Time0 来控制,找到相应的寄存器:a -- I/O口寄存器及地址 GPD0CON 0x114000a0b -- Time0 寄存器及地址 基地址为:TIMER_BASE 0x139D0000 这些物理寄存器地址都是相邻原创 2016-03-11 21:25:37 · 12754 阅读 · 4 评论 -
Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动
现在,我们来编写自己第一个字符设备驱动 —— 点亮LED。硬件平台:Exynos4412(FS4412)编写驱动分下面几步:a -- 查看原理图、数据手册,了解设备的操作方法;b -- 在内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始;c -- 实现驱动程序的初始化:比如向内核注册这个驱动程序,这样应用程序传入文件名,内核才能找到相应的驱动程序;d原创 2016-03-10 22:48:11 · 12371 阅读 · 10 评论 -
Linux 字符设备驱动结构(四)—— file_operations 结构体知识解析
前面在 Linux 字符设备驱动开发基础 (三)—— 字符设备驱动结构(中) ,我们已经介绍了两种重要的数据结构 struct inode{...}与 struct file{...} ,下面来介绍另一个比较重要数据结构struct _file_operationsstruct _file_operations在Fs.h这个文件里面被定义的,如下所示:struct file_ope原创 2016-03-10 22:20:30 · 23027 阅读 · 0 评论 -
Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析
一、字符设备基础知识1、设备驱动分类 linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序:字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。块设备:是指可以从设备的任意位置读取一定长度数据的设备。块原创 2016-03-09 23:12:34 · 59261 阅读 · 31 评论 -
Exynos4412 裸机开发—— 流水灯
这里我们使用的开发板是4412,开发板4412上有4个LED灯,我们这里可以利用其来做流水灯实验。下面是4个LED的原理图:查看原理图,4412开发板的LED由CPX2_7 CPX1_0 GPF3_4 GPF3_5 四个寄存器来控制,观察电路图,我们需要在IO 口输出高电平才能使LED点亮。 一、利用汇编编写程序 以GPX2为例,通过修改GPX2CON、GPX2D原创 2016-02-24 22:38:03 · 11569 阅读 · 3 评论 -
Exynos4412裸机开发 —— RTC 实时时钟单元
RTC(Real-Time Clock) 实时时钟。RTC是集成电路,通常称为时钟芯片。在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能正常工作(通常采用后备电池供电)。它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的32.768kHz 晶体和电阻电容等。 一、RTC 控制器 实时时钟(RTC)单原创 2016-02-25 23:17:16 · 5075 阅读 · 1 评论 -
WIFI vs 无线网
大家好多人都在使用无线设备上网,好多人对一些名词充满了好奇,比如WLAN和WIFI的区别是什么? WIFI无线上网和WLAN无线上网是什么意思? 这篇文章中我们为大家介绍什么是WIFI无线上网?大家可能会有这样的疑问,听说最多的应该是WLAN无线上网,很多笔记本电脑使用的都是WLAN无线上网,那么WLAN和WIFI有什么区别呢?一、基础概念a -- WLAN无线上原创 2016-04-03 23:39:01 · 2443 阅读 · 0 评论 -
Exynos4412裸机开发——中断处理
以KEY2控制LED3亮灭为例:原创 2016-02-25 19:12:39 · 13570 阅读 · 11 评论 -
Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型
提到 sysfs 文件系统 ,必须先需要了解的是Linux设备模型,什么事Linux设备模型呢?一、Linux 设备模型1、设备模型概述 从2.6版本开始,Linux开发团队便为内核建立起一个统一的设备模型。在以前的内核中没有独立的数据结构用来让内核获得系统整体配合的信息。尽管缺乏这些信息,在多数情况下内核还是能正常工作的。然而,随着拓扑结构越来越复杂,以及要支持诸如电源管理等原创 2016-03-12 12:19:28 · 12073 阅读 · 2 评论 -
Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
前面我们学习了字符设备结构体cdev Linux 字符设备驱动开发 (一)—— 字符设备驱动结构(上) 下面继续学习字符设备另外几个重要的数据结构。 先看下面这张图:原创 2016-03-10 20:58:48 · 13141 阅读 · 2 评论 -
Linux 设备驱动开发 —— platform 设备驱动
一、platform总线、设备与驱动 一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等确不依附于此类总线。基于这一背景,Linux发明了一种虚拟的总线,称为platform总线,相应的设备称为platform_d原创 2016-03-12 14:45:56 · 14205 阅读 · 5 评论 -
iptables配置——NAT地址转换
iptables nat 原理同filter表一样,nat表也有三条缺省的"链"(chains): PREROUTING:目的DNAT规则 把从外来的访问重定向到其他的机子上,比如内部SERVER,或者DMZ。 因为路由时只检查数据包的目的ip地址,所以必须在路由之前就进行目的PREROUTING DNAT; 系统先P原创 2016-11-29 22:30:11 · 64806 阅读 · 0 评论 -
iptables详解
一:前言防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代原创 2016-11-29 22:27:28 · 1179 阅读 · 0 评论 -
交叉编译知识解析(二) —— 交叉编译器的名字的命名规则
在折腾嵌入式开发,用到交叉编译器的时候,常常会看到这样的名字:arm-xscale-linux-gnueabi-gccarm-liunx-gnu-gcc等等 其中,对应的交叉编译器的前缀为:arm-xscale-linux-gnueabi-arm-liunx-gnu- 下面以编译crosstool-ng中:通过ct-ng list-sampl原创 2016-07-04 20:24:38 · 12709 阅读 · 0 评论 -
交叉编译知识解析(一) —— 交叉编译和交叉工具链
一、交叉编译简介1、什么是交叉编译1.1 本地编译 解释什么是交叉编译之前,先要明白一个概念:本地编译 我们之前常见的软件开发,都是属于本地编译:在当前的PC下,x86的CPU下,直接编译出来程序,可以运行的程序(或者库文件),其可以直接在当前的环境,即x86的CPU下,当前电脑中,运行。 此时的编译,可以叫做,本地编译,即在当前目标平台下,原创 2016-07-04 19:22:36 · 24095 阅读 · 2 评论 -
Exynos4412裸机开发综合练习
下面是一个案例需求:1、编写一段程序,该程序的主要功能是监控电路板上的电压值,若电压值超过当前的电压限制则通过蜂鸣器报警,通过按键解除报警;2、其具体要求如下; a) 程序下载20s后,进入电压采集状态(使用RTC ALARM功能完成), 要求1s采集1次电路板电压值;(采用RTC TIME TICK完成)b) 每次电压采集完成后,通过COM2将采集到的电压值发送到PC,在PC端可原创 2016-02-29 22:22:42 · 6273 阅读 · 1 评论 -
Exynos4412 裸机开发 —— IIC总线
(下面大部分内容来自Exynos4412手册,翻译自http://blog.csdn.net/fengel_cs/article/details/50515547 感谢作者!) 一、综述 Exynos4412精简指令集微处理器支持4个IIC总线控制器。为了能使连接在总线上的主和从设备之间传输数据,专用的数据线SDA和时钟信号线SCL被使用,他们都是双向的。原创 2016-02-28 16:43:26 · 9416 阅读 · 1 评论 -
Exynos4412裸机开发 —— 看门狗定时器
一、看门狗定时器概述 看门狗(WatchDog Timer) 定时器和PWM的定时功能目的不一样。它的特点是,需要不同的接收信号(一些外置看门狗芯片)或重新设置计数器,保持计数值不为0。一旦一些时间接收不到信号,或计数值为0,看门狗将发出复位信号复位系统或产生中断。 看门狗的作用是微处理器收到干扰进入错误状态后,使系统在一定时间间隔内复位。因此看门狗是保证系统长期、可靠和原创 2016-02-27 16:22:56 · 5614 阅读 · 1 评论 -
Exynos4412裸机开发 —— UART
一、Exynos4412 UART 的特性 Exynos4412 中UART,有4 个独立的通道,每个通道都可以工作于中断模式或DMA 模式,即 UART 可以发出中断或 DMA 请求以便在UART 、CPU 间传输数据。UART 由波特率发生器、发送器、接收器和控制逻辑组成。 使用系统时钟时,Exynos4412 的 UART 波特率可以达到 4Mbps 。波特率可以通过原创 2016-02-27 17:09:43 · 6456 阅读 · 2 评论 -
Exynos4412裸机开发 —— A/D转换器
一、Exynos4412 A/D转换器概述1、简述 10位或12位CMOS再循环式模拟数字转换器,它具有10通道输入,并可将模拟量转换至10位或12位二进制数。5Mhz A/D 转换时钟时,最大1Msps的转换速度。A/D转换具备片上采样保持功能,同时也支持待机工作模式。2、特性ADC接口包括如下特性。1)10bit/12bit输出位可选。2)微分误差原创 2016-02-27 20:00:25 · 5098 阅读 · 1 评论 -
Linux 设备驱动开发 —— Tasklets 机制浅析
一 、Tasklets 机制基础知识点1、Taklets 机制概念 Tasklets 机制是linux中断处理机制中的软中断延迟机制。通常用于减少中断处理的时间,将本应该是在中断服务程序中完成的任务转化成软中断完成。 为了最大程度的避免中断处理时间过长而导致中断丢失,有时候我们需要把一些在中断处理中不是非常紧急的任务放在后面执行,而让中断处理程序尽快返回。在老版本的原创 2016-03-13 13:07:39 · 4477 阅读 · 1 评论 -
Exynos4412 文件系统制作(三)—— 文件系统移植
busybox原创 2016-03-08 18:37:27 · 3427 阅读 · 0 评论 -
Linux 文件系统与设备文件系统 (一)—— udev 设备文件系统
一、什么是Linux设备文件系统 首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。那我们移植好的各种设备驱动的设备文件怎么没有啊?如果要使用这些原创 2016-03-12 10:55:35 · 15372 阅读 · 3 评论 -
Linux 字符设备驱动开发基础(六)—— VFS 虚拟文件系统解析
一、VFS 虚拟文件系统基础概念 Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在。虚拟文件系统,即VFS(Virtual File System)是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如 ext2,vfat 提供接口机制。 Linux 有两个特性:a -- 跨原创 2016-03-11 23:39:49 · 6727 阅读 · 2 评论 -
Linux 驱动开发之内核模块开发(四)—— 符号表的导出
Linux内核头文件提供了一个方便的方法用来管理符号的对模块外部的可见性,因此减少了命名空间的污染(命名空间的名称可能会与内核其他地方定义的名称冲突),并且适当信息隐藏。 如果你的模块需要输出符号给其他模块使用,应当使用下面的宏定义:EXPORT_SYMBOL(name);EXPORT_SYMBOL_GPL(name); //只适用于包含GPL许可权的模块; 这两个宏均用于原创 2016-03-09 21:30:51 · 5252 阅读 · 0 评论 -
Linux 驱动开发之内核模块开发 (三)—— 模块传参
一、module_param() 通常在用户态下编程,即可以通过main()的来传递命令行参数,而编写一个内核模块则通过module_param() module_param()宏是Linux 2.6内核中新增的,该宏被定义在include/linux/moduleparam.h文件中,具体定义如下:#define module_param(name,原创 2016-03-09 20:48:49 · 2788 阅读 · 0 评论 -
Exynos4412 Uboot 移植(六)—— 相关知识补充
一、gd结构体的定义与使用gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递。分别定义在./include/asm-armgd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递。分别定义在./include/asm-arm/global_data.h和 ./include/asm-arm/u-b原创 2016-03-07 15:46:21 · 3431 阅读 · 0 评论 -
Exynos4412 Uboot 移植(五)—— Uboot 移植过程
Uboot 版本:u-boot-2013.01开发板:FS_4412 平台(Exynos4412,可以根据自己的板子修改,只要是4412的过程都是一样的)一、建立自己的平台1、下载源码我们可以在下面这个网站上下载最新的和以前任一版本的ubootftp://ftp.denx.de/pub/u-boot/这里我们使用的是u-boot-2013.012、解压u原创 2016-03-07 14:54:16 · 20366 阅读 · 17 评论 -
Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
Uboot添加自定义命令:uboot中的命令使用U_BOOT_CMD这个宏声明来注册进系统,链接脚本会把所有的cmd_tbl_t结构体放在相邻的地方。(占坑,后续添加。。。)原创 2016-03-04 22:36:18 · 6011 阅读 · 0 评论 -
Exynos4412 所用内存 —— DDR2
一、SDRAM二、DDR三、DDR2四、DDR2的配置原创 2016-03-04 19:08:45 · 2864 阅读 · 0 评论 -
Exynos4412 所用外存 —— eMMC
Exynos4412所用外存不是原来的Nand Flash 与 Nor Flash,而是eMMC。eMMC是什么呢?和Nand Flash有什么区别呢?一、eMMC概述 eMMC(Embeded MultiMedia Card):它并非是一种全新尺寸的存储卡,而是由MMC协会所订立的内嵌式存储器标准规格,而且还是专门为手机和移动嵌入式产品设计的。eMMC简单来说是一个嵌原创 2016-03-03 22:30:31 · 3769 阅读 · 0 评论 -
Exynos4412启动过程分析
学习Exynos4412启动流程前,我们先看看三星4412芯片启动框图:我们从图中可以看到4412内部有64K的ROM和256K SRAM,在ROM中已经固化好了一段代码,当硬件上电后首先运行的就是这段代码,这段代码三星起名为BLO(iROM BOOT 代码)。其作用是初始化SRAM,而SRAM的作用又是初始化DRAM。在图中我们很清楚看到这一个运行过程。1、在芯片的iROM中已经原创 2016-03-03 23:16:32 · 9340 阅读 · 0 评论 -
Binutils工具集 解析
对于嵌入式系统开发,掌握相应的工具至关重要,它能使我们解决问题的效率大大提高。目前,可以说嵌入式系统的开发工具是GNU的天下,因为来自GNU的GCC编译器支持大量的目标处理器。除了GCC,还有一个非常重要的、同样来自于GNU的工具集(toolchain) —— binutils toolchain。这一工具集中存在的一些工具,可以说是我们开发和调试不可缺少的利器。 Binutils中的工具不少原创 2016-03-02 20:59:03 · 19543 阅读 · 0 评论 -
Linux下静态IP地址的设置及TFTP服务的搭建
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。TFTP承载在UDP上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。 在谈TFTP之前,先简单讲一下Linux网络配置,网络中最重要的当然是IP地原创 2015-12-15 19:55:13 · 6357 阅读 · 0 评论 -
ARM 软中断指令SWI
前面我们学习ARM工作模式中,处理器模式切换可以通过软件控制进行切换,即修改CPSR模式位,但这是在特权模式下,当我们处于用户模式下,是没有权限实现模式转换的。若想实现模式切换,只能由另一种方法来实现,即通过外部中断或是异常处理过程进行切换。于是ARM指令集中提供了两条产生异常的指令,通过这两条指令可以用软件的方法实现异常,其中一个就是中断指令SWI 。 一、软件中断 软中原创 2016-03-01 22:35:40 · 33549 阅读 · 4 评论