
嵌入式开发
文章平均质量分 86
zqixiao_09
这个作者很懒,什么都没留下…
展开
-
route命令详解与使用实例
1. 使用背景需要接入两个网络,一个是部署环境所在内网环境,这个环境是上不了外网, 外网环境很可能是一个无线网络。如果两者都连接上,很可能导致有一方不能起作用,即外网或内网上不了,常常需要使用繁琐的“禁用网络连接”、“启用网络连接”的操作来进行内外网的切换,甚是麻烦。为了解决这个问题,可以使用route命令来使得同时内外网都可用。2. rou原创 2016-11-29 22:56:35 · 28706 阅读 · 3 评论 -
iptables配置——NAT地址转换
iptables nat 原理同filter表一样,nat表也有三条缺省的"链"(chains): PREROUTING:目的DNAT规则 把从外来的访问重定向到其他的机子上,比如内部SERVER,或者DMZ。 因为路由时只检查数据包的目的ip地址,所以必须在路由之前就进行目的PREROUTING DNAT; 系统先P原创 2016-11-29 22:30:11 · 65022 阅读 · 0 评论 -
iptables详解
一:前言防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代原创 2016-11-29 22:27:28 · 1228 阅读 · 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 · 12910 阅读 · 0 评论 -
交叉编译知识解析(一) —— 交叉编译和交叉工具链
一、交叉编译简介1、什么是交叉编译1.1 本地编译 解释什么是交叉编译之前,先要明白一个概念:本地编译 我们之前常见的软件开发,都是属于本地编译:在当前的PC下,x86的CPU下,直接编译出来程序,可以运行的程序(或者库文件),其可以直接在当前的环境,即x86的CPU下,当前电脑中,运行。 此时的编译,可以叫做,本地编译,即在当前目标平台下,原创 2016-07-04 19:22:36 · 24528 阅读 · 2 评论 -
WIFI vs 无线网
大家好多人都在使用无线设备上网,好多人对一些名词充满了好奇,比如WLAN和WIFI的区别是什么? WIFI无线上网和WLAN无线上网是什么意思? 这篇文章中我们为大家介绍什么是WIFI无线上网?大家可能会有这样的疑问,听说最多的应该是WLAN无线上网,很多笔记本电脑使用的都是WLAN无线上网,那么WLAN和WIFI有什么区别呢?一、基础概念a -- WLAN无线上原创 2016-04-03 23:39:01 · 2486 阅读 · 0 评论 -
Linux 设备驱动开发 —— Tasklets 机制浅析
一 、Tasklets 机制基础知识点1、Taklets 机制概念 Tasklets 机制是linux中断处理机制中的软中断延迟机制。通常用于减少中断处理的时间,将本应该是在中断服务程序中完成的任务转化成软中断完成。 为了最大程度的避免中断处理时间过长而导致中断丢失,有时候我们需要把一些在中断处理中不是非常紧急的任务放在后面执行,而让中断处理程序尽快返回。在老版本的原创 2016-03-13 13:07:39 · 4542 阅读 · 1 评论 -
Linux 设备驱动开发 —— platform 设备驱动
一、platform总线、设备与驱动 一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等确不依附于此类总线。基于这一背景,Linux发明了一种虚拟的总线,称为platform总线,相应的设备称为platform_d原创 2016-03-12 14:45:56 · 14375 阅读 · 5 评论 -
Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型
提到 sysfs 文件系统 ,必须先需要了解的是Linux设备模型,什么事Linux设备模型呢?一、Linux 设备模型1、设备模型概述 从2.6版本开始,Linux开发团队便为内核建立起一个统一的设备模型。在以前的内核中没有独立的数据结构用来让内核获得系统整体配合的信息。尽管缺乏这些信息,在多数情况下内核还是能正常工作的。然而,随着拓扑结构越来越复杂,以及要支持诸如电源管理等原创 2016-03-12 12:19:28 · 12180 阅读 · 2 评论 -
Linux 文件系统与设备文件系统 (一)—— udev 设备文件系统
一、什么是Linux设备文件系统 首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。那我们移植好的各种设备驱动的设备文件怎么没有啊?如果要使用这些原创 2016-03-12 10:55:35 · 15602 阅读 · 3 评论 -
Linux 字符设备驱动开发基础(六)—— VFS 虚拟文件系统解析
一、VFS 虚拟文件系统基础概念 Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在。虚拟文件系统,即VFS(Virtual File System)是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如 ext2,vfat 提供接口机制。 Linux 有两个特性:a -- 跨原创 2016-03-11 23:39:49 · 6879 阅读 · 2 评论 -
Linux 字符设备驱动开发基础(五)—— ioremap() 函数解析
一、 ioremap() 函数基础概念 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:a -- I/O 映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或原创 2016-03-11 23:26:18 · 35774 阅读 · 2 评论 -
Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析
解析完 open、close、read、write 四个函数后,终于到我们的 ioctl() 函数了一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。下面是其源代码定义:函数名: ioctl功 能: 控制I/O设备用 法: int原创 2016-03-11 22:55:02 · 15693 阅读 · 5 评论 -
Linux 字符设备驱动开发基础(三)—— read()、write() 相关函数解析
我们在前面讲到了file_operations,其是一个函数指针的集合,用于存放我们定义的用于操作设备的函数的指针,如果我们不定义,它默认保留为NULL。其中有最重要的几个函数,分别是open()、read()、write()、ioctl(),下面分别对其进行解析 下面先写一下打开和关闭设备的函数 int (*open) (struct inode *, struc原创 2016-03-11 22:16:23 · 20978 阅读 · 6 评论 -
Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动
编写驱动的第一步仍是看原理图: 可以看到,该蜂鸣器由 GPD0_0 来控制 ,查手册可知该I/O口由Time0 来控制,找到相应的寄存器:a -- I/O口寄存器及地址 GPD0CON 0x114000a0b -- Time0 寄存器及地址 基地址为:TIMER_BASE 0x139D0000 这些物理寄存器地址都是相邻原创 2016-03-11 21:25:37 · 12871 阅读 · 4 评论 -
Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动
现在,我们来编写自己第一个字符设备驱动 —— 点亮LED。硬件平台:Exynos4412(FS4412)编写驱动分下面几步:a -- 查看原理图、数据手册,了解设备的操作方法;b -- 在内核中找到相近的驱动程序,以它为模板进行开发,有时候需要从零开始;c -- 实现驱动程序的初始化:比如向内核注册这个驱动程序,这样应用程序传入文件名,内核才能找到相应的驱动程序;d原创 2016-03-10 22:48:11 · 12488 阅读 · 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 · 23195 阅读 · 0 评论 -
Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
前面我们学习了字符设备结构体cdev Linux 字符设备驱动开发 (一)—— 字符设备驱动结构(上) 下面继续学习字符设备另外几个重要的数据结构。 先看下面这张图:原创 2016-03-10 20:58:48 · 13268 阅读 · 2 评论 -
Linux 字符设备驱动结构(二)—— 自动创建设备节点
上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号。第一种是使用mknod手工创建:mknod filename type major minor第二种是自动创建设备节点:利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置。在驱动初始化代码里调用class_create为该设备创建一个原创 2016-03-10 20:46:35 · 19647 阅读 · 3 评论 -
Linux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析
一、字符设备基础知识1、设备驱动分类 linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序:字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。块设备:是指可以从设备的任意位置读取一定长度数据的设备。块原创 2016-03-09 23:12:34 · 59891 阅读 · 31 评论 -
Linux 驱动开发之内核模块开发(四)—— 符号表的导出
Linux内核头文件提供了一个方便的方法用来管理符号的对模块外部的可见性,因此减少了命名空间的污染(命名空间的名称可能会与内核其他地方定义的名称冲突),并且适当信息隐藏。 如果你的模块需要输出符号给其他模块使用,应当使用下面的宏定义:EXPORT_SYMBOL(name);EXPORT_SYMBOL_GPL(name); //只适用于包含GPL许可权的模块; 这两个宏均用于原创 2016-03-09 21:30:51 · 5349 阅读 · 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 · 2829 阅读 · 0 评论 -
Linux 驱动开发之内核模块开发 (二)—— 内核模块编译 Makefile 入门
一、模块的编译 我们在前面内核编译中驱动移植那块,讲到驱动编译分为静态编译和动态编译;静态编译即为将驱动直接编译进内核,动态编译即为将驱动编译成模块。而动态编译又分为两种:a -- 内部编译 在内核源码目录内编译b -- 外部编译 在内核源码的目录外编译二、具体编译过程分析 注:本次编译是外部编译,使用原创 2016-03-09 20:15:14 · 10455 阅读 · 2 评论 -
Exynos4412 文件系统制作(三)—— 文件系统移植
busybox原创 2016-03-08 18:37:27 · 3488 阅读 · 0 评论 -
Exynos4412 文件系统制作(二)—— 文件系统简介
一、Linux磁盘分区和目录 Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同。目录结构基本上都是一样的。 Windows的文件结构是多个并列的树状结构,最顶部的是不同的磁盘(分区),如:C,D,E,F等。原创 2016-03-08 16:34:33 · 2904 阅读 · 0 评论 -
Exynos4412 文件系统制作(一)—— 文件系统的启动过程分析
原创 2016-03-07 22:05:09 · 3064 阅读 · 0 评论 -
Exynos4412 内核移植(七)—— 内核相关知识补充
一、内核调试方法简单分析1、addr2line: 解决oops错误 a -- oops消息 oops(也称 panic),称程序运行崩溃,程序崩溃后会产生oops消息。应用程序或内核线程的崩溃都会产生oops消息,通常发生oops时,系统不会发生死机,而在终端或日志中打印oops信息。原创 2016-03-07 22:02:49 · 2532 阅读 · 1 评论 -
Exynos4412 内核移植(六)—— 设备树解析
一、描述 ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及原创 2016-03-07 22:01:57 · 12776 阅读 · 2 评论 -
Exynos4412 内核移植(五)—— 驱动的移植
驱动程序的动态编译和静态编译原创 2016-03-07 22:01:13 · 5652 阅读 · 1 评论 -
Exynos4412 内核移植(四)—— MMU 相关知识解析
一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多原创 2016-03-07 21:48:04 · 4890 阅读 · 8 评论 -
Exynos4412 内核移植(二)—— 内核编译过程分析
内核的编译同样是从Makefile 来分析:一、内核源码结构Linux内核文件数目近2万,出去其他架构CPU的相关文件,他们分别位于顶层目录下的17个子目录,各个目录功能独立,下面是常用目录:arch:体系结构相关代码ipc:进程调度相关代码mm:内存管理Documentation:帮助文档net:网络协议lib:库scripts:编译相关脚本工具tools原创 2016-03-07 20:14:25 · 6341 阅读 · 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 · 3481 阅读 · 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 · 20474 阅读 · 17 评论 -
Exynos4412 Uboot 移植(四)—— Uboot引导内核过程分析
bootloader 要想启动内核,可以直接跳到内核的第一个指令处,即内核的起始地址,这样便可以完成内核的启动工作了。但是要想启动内核还需要满足一些条件,如下所示:1、cpu 寄存器设置 * R0 = 0 * R1 = 机器类型 id * R2 = 启动参数在内存中的起始地址2、cpu 模式 * 禁止所有中断 * 必须为SVC(超级用户原创 2016-03-07 12:32:27 · 6560 阅读 · 1 评论 -
Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
Uboot添加自定义命令:uboot中的命令使用U_BOOT_CMD这个宏声明来注册进系统,链接脚本会把所有的cmd_tbl_t结构体放在相邻的地方。(占坑,后续添加。。。)原创 2016-03-04 22:36:18 · 6096 阅读 · 0 评论 -
Exynos4412 Uboot 移植(二)—— Uboot 启动流程分析
U-Boot 属于两阶段的Bootloader,第一阶段的文件为arch/arm/cpu/armv7 /start.S 和 board//lowlevel_init.S,前者是平台相关的,后者是开发板相关的。uboot启动流程分析如下:第一阶段:a -- 设置cpu工作模式为SVC模式b -- 关闭中断,mmu,cachev -- 关看门狗d -- 初始化内存,串口e原创 2016-03-04 22:29:56 · 14900 阅读 · 4 评论 -
Exynos4412 所用内存 —— DDR2
一、SDRAM二、DDR三、DDR2四、DDR2的配置原创 2016-03-04 19:08:45 · 2903 阅读 · 0 评论 -
Exynos4412启动过程分析
学习Exynos4412启动流程前,我们先看看三星4412芯片启动框图:我们从图中可以看到4412内部有64K的ROM和256K SRAM,在ROM中已经固化好了一段代码,当硬件上电后首先运行的就是这段代码,这段代码三星起名为BLO(iROM BOOT 代码)。其作用是初始化SRAM,而SRAM的作用又是初始化DRAM。在图中我们很清楚看到这一个运行过程。1、在芯片的iROM中已经原创 2016-03-03 23:16:32 · 9432 阅读 · 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 · 3826 阅读 · 0 评论 -
mini-uboot 启动过程简单分析
单片机有最小系统,所谓最小系统,就是单片机能正常工作所需要的最少外设。对于Uboot来说,同样有个最小系统,因为Uboot最主要的功能就是引导内核。下面我们通过一个简单的Mini-Uboot来分析Uboot的启动加载过程。(只是分析过程,此Uboot具有引导内核功能) 我们拿到一个工程,想了解它的功能,最方便的就是读它的makefile。一、Makefilesinclude原创 2016-03-03 21:13:46 · 4392 阅读 · 2 评论