![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OK6410
Stoneshen1211
笨鸟后飞慢慢飞。。。
展开
-
linux cut用法
一、作用cut命令是一个选取命令,其功能是将文件中的每一行”字节” ”字符” ”字段” 进行剪切,选取我们需要的,并将这些选取好的数据输出至标准输出二、格式cut -[n]b file cut -c file cut -d[分隔符] -f[域] file三、参数解释-b(bytes) :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了原创 2016-08-12 20:45:40 · 45444 阅读 · 4 评论 -
嵌入式学习-驱动开发-lesson2-LED字符设备驱动
一、设备控制1)设备控制应用函数在用户空间,主要是使用ioctl系统调用来控制设备。 int ioctl(int fd,unsigned long cmd,…) fd: 要控制的设备文件描述符 cmd: 发送给设备的控制命令 …: 第3个参数是可选的参数,存在与否是依赖于控制命令(第 2 个参数 )。2)设备控制驱动函数应用程序使用ioctl系统调用时,驱动程序会响应ioctl系统调用,主要原创 2016-07-28 22:18:19 · 692 阅读 · 0 评论 -
ioctl的实现
转载自大神:http://blog.chinaunix.net/uid-25014876-id-59419.html很详细,留以以后查看。一、ioctl的简介:虽然在文件操作结构体”struct file_operations”中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数。如CD-ROM的驱动,想要一个弹出光驱的操作,这种操作并不是所有的字符设备都需要的,所以转载 2016-07-28 22:15:54 · 5631 阅读 · 0 评论 -
构造IOCTL命令的学习心得-----_IO, _IOR, _IOW, _IOWR 幻数的理解
转载自:http://blog.csdn.net/qq429205464/article/details/7822442在编写ioctl代码之前,需要选择对应不同命令的编号。为了防止对错误的设备使用正确的命令,命令号应该在系统范围内唯一,这种错误匹配并不是不会发生,程序可能发现自己正在试图对FIFO和audio等这类非串行设备输入流修改波特率,如果每一个ioctl命令都是唯一的,应用程序进行这转载 2016-07-28 22:14:43 · 943 阅读 · 0 评论 -
嵌入式学习-驱动开发前奏-lesson4-驱动分类和硬件访问相关
一、驱动开发相关知识1)驱动的分类1.常规分类法按照常规的分类,可以将驱动分为字符设备、块设备、网络接口(网络设备)等。 字符设备 字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现 open, close, read和write 系统调用。例:串口,LED,按键。块设备 在大部分的Unix系统中, 块设备定义为:以块(通常是512字节)为最小传输单位的设备,块设原创 2016-07-23 14:40:30 · 612 阅读 · 0 评论 -
嵌入式学习-uboot-lesson2-ARM相关知识
1.ARM简介 关于arm的一些概念性的知识,这里就不再说明,因此需要了解三个方面的内容: 架构:ARMV5 ARMV6 ARMV7 内核:ARM9 ARM11 Cortex-A8 芯片:S3C2440 S3C6410 关于这三款芯片的比较: 2.arm处理器工作模式 关于arm处理器的工作模式,可以从手册中找到相关描述: 从上面可以看到,a原创 2016-06-21 09:58:48 · 502 阅读 · 0 评论 -
嵌入式学习-uboot-lesson13-串口相关
一.串口基本知识1.串口角色数据传输、充当控制台(即uboot启动的时候,通过串口输入输出数据进行控制)2.串口通讯 串口通讯,分为同步通讯和异步通讯,我们通常使用的都是异步串口。通讯时,双方先约定好数据帧的格式,即波特率,数据位,停止位,奇偶校验位等。这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。常用的波特率有38400,115200。起原创 2016-07-06 16:04:25 · 703 阅读 · 0 评论 -
嵌入式学习-uboot-lesson1-链接器脚本基础知识
1.链接器脚本的作用链接脚本的作用是描述输入文件中的各个段(数据段,代码段,堆,栈,bss)如何被映射到输出文件中,并控制输出文件的内存排布2.链接器脚本的组成 一个可执行程序通常是由:代码段,数据段,bss段构成的。同样,在用于链接这个程序的链接器脚本中,就会反应出这几个段的信息。3.编程实例 一个链接器脚本主要分为几个方面: 段,起始链接地址,对齐设置,变量的使用3.1 段信息 主要为代原创 2016-06-20 18:38:58 · 603 阅读 · 0 评论 -
嵌入式学习-驱动开发-lesson1-字符设备驱动模型
驱动模型分析 在Linux系统中,设备的类型非常繁多,如:字符设备,块设备,网络接口设备,USB设备,PCI设备,平台设备,混杂设备……,而设备类型不同,也意味着其对应的驱动程序模型不同,但是这些驱动模型中有一些具有共性的东西,可以让我们对这些众多的驱动模型有一个更好的认识。一、设备描述结构在任何一种驱动模型中,设备(字符设备、块设备、网络设备)都会用内核中的一种结构来描述。字符设备在内核中使用s原创 2016-07-27 12:44:31 · 1991 阅读 · 2 评论 -
嵌入式学习-linux系统-lesson2-内核相关
一、linux内核简介1)、linux体系结构 从上图可以看到,linux主要由 内核空间和用户空间 两部分组成。 用户空间主要是一些应用程序和C库,内核空间主要包含一些 系统调用接口和一些与体系结构相关的代码。 之所以分为用户空间和内核空间,是对于Linux系统的一种保护,防止用户一些误操作导致系统崩溃。 内核空间和用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够完成从用户空原创 2016-07-16 22:51:29 · 454 阅读 · 0 评论 -
嵌入式学习-linux系统-lesson3-文件系统的制作及nfs挂载
一、创建文件系统1) 创建目录创建一些必要的目录,如下所示:#mkdir rootfs#cd rootfs#mkdir bin dev etc lib proc sbin sys usr mnt tmp var#mkdir usr/bin usr/lib usr/sbin lib/modules2) 创建设备文件#cd rootfs/dev#mknod -m 666 console c(字原创 2016-07-19 16:02:48 · 466 阅读 · 0 评论 -
嵌入式学习-驱动开发-lesson3-混杂设备驱动模型与linux中断处理流程
一、混杂设备驱动模型混杂设备属于字符设备中的一种在Linux驱动中把无法归类的一些的设备定义为混杂设备(miscdevice)。他们共享相同的主设备号MISC_MAJOR(即10),但次设备号不同。 所有的miscdevice设备形成了一个链表,对设备访问时内核根据次设备号查找对应的miscdevice设备,然后调用其file_operations结构中注册的文件操作接口进行操作。mi原创 2016-07-30 21:14:01 · 835 阅读 · 0 评论 -
嵌入式学习-驱动开发-lesson7.2-DM9000驱动流程分析
lesson3 dm9000网卡驱动深度分析下面的dm9000的分析只是简单的分析,并不全面,可能会有一些遗漏和错误的地方,更加详细的dm9000分析,请参考下面这两位大牛的博客: zhongli_i大牛: dm9000网卡驱动分析1 http://blog.chinaunix.net/uid-26442066-id-3184195.html dm9000网卡驱动分析2 http原创 2016-08-10 21:44:00 · 918 阅读 · 0 评论 -
嵌入式学习-驱动开发-lesson7.1-网卡驱动架构分析驱动及CS8900流程分析
lesson1 网卡驱动架构分析一、网络子系统 在内核相关一课中,已经介绍过,linux内核一共有7个子系统(模块): 1.SCI 2.Pm 3.MM 4.Arch 5.Vfs 6.Network stack 7.DD 并且在前面已经讲过内存管理子系统和进程管子系统,今天主要讲解linux网络子系统。首先看一下网络子系统的主要组成部分,如下图: 如上图所示,处于内原创 2016-08-10 21:43:23 · 1992 阅读 · 0 评论 -
嵌入式学习-驱动开发-lesson6.3-UART驱动send和receive流程分析
四、串口驱动分析–数据发送本课需要解决的知识点是: 1.当使用write系统调用时,是如何一步一步传递到串口驱动来的, 2.当串口驱动接收到来自用户空间的发送数据请求后,如何实现发送1)TTY数据发送调用关系 tty_write又调用线路规程中的n_tty_write 在n_tty_write中, 在uart_write函数中,又会调用uart原创 2016-08-04 21:59:02 · 2351 阅读 · 0 评论 -
嵌入式学习-驱动开发-lesson6.2-UART驱动初始化和open流程分析
二、串口分析–初始化/******************************************************************************/ 首先贴出来下面要用到的4个操作函数集, 1.struct tty_ldisc *ld; struct tty_ldisc_ops *ops; ld->ops->xx 2. struct tty原创 2016-08-04 21:57:56 · 1768 阅读 · 0 评论 -
嵌入式学习-驱动开发-lesson6.1-TTY驱动架构分析
一、TTY驱动架构1).TTY概念解析在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。• 串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备。Linux把每个串行端口都看作是一个字符设备。这些串行端口所对应的设备名称是 /dev/ttySAC0;/dev/ttySAC1……• 控制台终端(/dev/con原创 2016-08-04 21:55:54 · 1571 阅读 · 0 评论 -
嵌入式学习-驱动开发-lesson5-总线设备驱动模型及平台总线驱动
一、总线设备驱动模型随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,从Linux 2.6内核开始提供了全新的设备模型即总线模型,他的优势在于能够处理热插拔、提高驱动程序的可移植性。总线模型也可称之为总线设备驱动模型,既然是总线设备驱动模型,首先要有一条总线,设备和驱动则挂载到这条总线上,当驱动安装原创 2016-08-04 21:41:25 · 614 阅读 · 1 评论 -
嵌入式学习-驱动开发前奏-lesson2-内存管理与进程管理子系统
内存管理子系统在内核相关一课中,已经介绍过,linux内核一共有7个子系统: 1.SCI 2.Pm 3.MM 4.Arch 5.Vfs 6.Network stack 7.DD在以后的驱动学习章节中,主要是与 MM PM VFS 这三个相关。 在本章节中则主要讲解MM(内存管理子系统)1)内存管理模型 根据上面的图,可以得知,内存的管理主要是做两个方面的工作: 1:物理内存分配原创 2016-07-21 14:54:36 · 1240 阅读 · 0 评论 -
嵌入式学习-驱动开发前奏-lesson1-内核模块相关知识
一、内核模块的安装与卸载1.安装例如usb.ko#insmod usb.ko2.查看使用命令#lsmod 可以查看所有已经安装的内核模块3.卸载使用命令#rmmod usb二、第一个内核模块1)代码#include <linux/init.h>#include <linux/module.h>static int hello_init(){printk(KERN_WARNING"hello w原创 2016-07-21 09:21:07 · 612 阅读 · 0 评论 -
嵌入式学习-驱动开发-lesson4-按键混杂设备驱动
一、按键驱动硬件操作实现1)按键硬件初始化按键的硬件初始化和在裸机编程时一样,就是将其设置为外部中断模式,但在这里需要注意虚拟地址与物理地址的转化。#define GPNCON 0x7f008830 //控制寄存器//硬件初始化void kw_init(){ int *gpncon; int data; gpncon = ioremap(GPNC原创 2016-07-30 21:16:39 · 1012 阅读 · 0 评论 -
嵌入式学习-uboot-lesson12-NandFlash相关
一、NandFlash原理解析1.NandFlash简介根据物理结构上的区别,NandFlash主要分为如下两类: •SLC (Single Level Cell): 单层式存储 •MLC (Multi Level Cell): 多层式存储 SLC在存储格上只存一位数据,而MLC则存放两位数据。 SLC的访问速度比MLC快3倍,SLC能进行10万次的擦写,MLC能进行1万次,MLC功耗比SL原创 2016-07-06 12:37:17 · 1549 阅读 · 0 评论 -
嵌入式学习-uboot-lesson11-按键中断
一、中断处理流程分析1.中断概念CPU在工作的过程中,经常需要与外设进行交互,交互的方式包括”轮询方式”,”中断方式”。 轮询方式: CPU不断地查询设备的状态。该方式实现比较简单,但CPU利用率很低,不适合多任务的系统。 中断方式: CPU在告知硬件开始一项工作后,就去做别的事去了,当硬件完成了该项工作后,向CPU发送一个信号,告知CPU它已经完成了这项工作。2.中断生命周期事件会送到中断原创 2016-07-05 19:36:11 · 2977 阅读 · 0 评论 -
嵌入式学习-linux系统-lesson1-Uboot相关
一、编译uboot1.配置通过makefile,得知自己的开发板的型号 配置uboot :OK6410: make forlinx_nand_ram256_config2.编译Make ARCH=arm CROSS_COMPILE=arm-Linux- 然后编译出uboot.bin3.下载通过dnw下载uboot.bin /home/dnw uboot.bin 50000000二、u原创 2016-07-14 11:43:31 · 505 阅读 · 1 评论 -
嵌入式学习-uboot-lesson4.3-关闭看门狗和中断
一、看门狗Watchdog在硬件上实现了计时功能,启动计时后,用户(软件)必须在计时结束前重新开始计时,俗称“喂狗”,如果到超时的时候还没有重新开始计时,那么它就认为系统是死机了,就自动重启系统。在S3C6410X.pdf中, 第一部分,为分频部分,将PCLK进行分频,从而得到自己需要的时钟 第二部分为计数部分,当计数值从预定值减为0时,则触发看门狗第三部分 第三部分会产生一个重启信号,让C原创 2016-06-24 16:14:27 · 2198 阅读 · 0 评论 -
嵌入式学习-uboot-lesson4.2-设置SVC模式
CPU是工作在SVC模式, 至于为什么是工作在SVC模式 在uboot start.s 详细分析 中有提到过, 对于为何此处是svc模式,而不是其他某种格式,其原因,可以从两方面来看: 1. 我们先简单的来分析一下那7种模式: a. 中止abt和未定义und模式 首先可以排除的是,中止abt和未定义und模式,那都是不太正常的模式,此处程序是正常运行的,所以不应该设置C原创 2016-06-24 16:03:12 · 1300 阅读 · 0 评论 -
嵌入式学习-uboot-lesson4.1-异常向量表
一关于异常,在ARM Architecture Reference Manual.pdf中,描述如下 其大意是:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件。(也就是中断)二异常共7种: 当一种异常发生的时候,ARM处理器会跳转到对应该异常的固定地址即上图的Normal address或者High vector address 处去执行异常处理程序,而原创 2016-06-24 15:41:45 · 1142 阅读 · 0 评论 -
嵌入式学习-uboot-lesson3-6410uboot启动流程分析
主要分为: 一.6410启动方式 二.6410地址布局 三.6410启动流程 四.uboot分析一.6410启动方式根据下图可以看到支持的启动方式有: 1.SROM(NORFLASH) 2.oneNAND 一种特殊的NANDFlash(既具有norflash特性也具有nandFlash的特性) 3.MODEN 4.IROM(intern rom)下分为SD和NANDFlash启动通过原创 2016-06-24 11:47:19 · 964 阅读 · 0 评论 -
ok6410 3.0.1内核调用V4L接口出错解决方法
在做视频监控项目,以前一直用的是2.6.36的内核,一直很正常,但是这几天换3.0.1内核,启动程序,却出现了错误,如下:./test_usb_camera XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXv4l2_open id=2Unable to handle kernel NULL pointer dereference at virtu原创 2016-05-05 17:21:34 · 1077 阅读 · 1 评论 -
ARM处理器工作模式和寄存器
ARMC处理器请看我转载的那篇文档。ARM寄存器如下图所示: 描述:1.无论处于什么工作模式下,R0~R7都会被使用,并且 发生工作模式切换时,需要进行现场保护2.在快速中断模式时,可以对R8_fiq~R12_fiq的内容不进行保护,其他模式必须对R8~R12的内容进行保护3.R14有两点作用:通过BL或者BLX指令调用子程序时存放当前的子程序的返回地址、在发生异常时用原创 2015-07-22 10:20:07 · 874 阅读 · 0 评论 -
OK6410内存及启动流程
一、内存 只是从大体上介绍,并没有涉及寄存器的操作 6410的系统资源为:256MB DDR 、2GB NANDFlash 如下图所示:ROM是只读存储器,RAM是随机存储器。 区别: 1.ROM(Read Only Memory)掉电数据不丢失,但存储读取速度慢,所以常用作存放程序,存放bootloader,存放内核,存放文件系统。 2.RAM(Random Access Memory原创 2015-07-23 08:53:57 · 1836 阅读 · 0 评论 -
TFTP的配置与使用
TFTP是一种基于UDP的文件传输协议,用于小文件的传输,在嵌入式中,通过TTFP从其目录中通过网络下载镜像到开发板。原创 2015-07-26 09:49:59 · 2800 阅读 · 0 评论 -
自动创建设备文件
当安装一个设备驱动后,需要创建设备文件方法有:1、使用mknod 手动创建2、自动创建 本文只是讲解使用步骤,并不深究为何。1.添加头文件2.定义static struct class *my_class;3.在init函数中,写入函数my_class = class_create(THIS_MODULE, "my_class1"); device原创 2015-07-26 16:41:35 · 800 阅读 · 0 评论 -
嵌入式学习-uboot-lesson4.4-关闭MMU和cache
一.cachecache里面存放的是存储器数据的拷贝 Cache是一种容量小但存取速度非常快的存储器,它保存最近用到的存储器中数据的拷贝。对于程序员来说,Cache是透明的。它自动决定保存哪些数据、覆盖哪些数据。按照功能划分: I-Cache(16KB): 指令Cache,用于存放指令 D-Cache(16kb): 数据Cache,用于存放数据二mmu和cache都是通过CP15协处理器来控制原创 2016-06-24 16:21:20 · 869 阅读 · 0 评论 -
嵌入式学习-uboot-lesson4.5-外设基地址初始化
6410不同于2440,在uboot中需要对外设基地址进行初始化。 关于为何要对外设基地址进行初始化,这篇文章有详细说明 设置外设基地址 这个操作是告诉CPU外设的基地址是多少 不同的芯片,即使使用的是ARM11的内核,那外设地址也有可能不一样。所以ARM11就加了一个告诉CPU外设基地址这个东西,当地址属于外设地址,CPU就使用外设总线去访问在arm核手册中,如下图,对外设基地址进原创 2016-06-24 16:33:02 · 1379 阅读 · 0 评论 -
嵌入式学习-uboot-lesson10-MMU初始化
MMU 存储器管理单元,在之前因为是操作物理地址,不需要MMU,因此是处于关闭状态的,而这次则是打开MMU并且使用MMU.一、MMU的作用1.将虚拟地址转化为物理地址2.进行访问权限的管理看上图可以得知,有三个运行的程序,他们的虚拟地址都为0x400000,但是若要使用物理地址,他们的物理地址不能够相同,因此就需要一个机制,使他们的相同的虚拟地址对应不同的物理地址,这个机制就是上图中的Pag原创 2016-07-02 19:25:55 · 2223 阅读 · 1 评论 -
嵌入式学习-uboot-lesson9.2-C点亮LED
在进行了前面的栈的初始化和BSS段的清除之后,可以使用C进行程序的编写,这里直接对LED进行操作,看其效果。新建一个main.c/*********************************************file name: main.c*author : stone*date : 2016.6.30*function : 进行LED的点亮***********原创 2016-07-02 11:27:09 · 793 阅读 · 0 评论 -
嵌入式学习-uboot-lesson9.1-C语言环境初始化
C语言环境的初始化是为了完成另外一些外设的初始化,如网口、串口等。毕竟在某些方面使用汇编没有C方便。 C语言环境的初始化主要完成以下几个方面的内容: 栈的初始化,BSS段的清除。一、栈初始化查找了一些网络资料,栈的主要作用是:保护现场/上下文,传递参数。更详细的解释,请参考uboot start.s 分析 因此在接下来要使用C语言,必须要对栈进行相应的初始化。1 栈栈是一种具有先进后出性质的数原创 2016-07-02 11:22:01 · 1064 阅读 · 1 评论 -
嵌入式学习-驱动开发前奏-lesson3-linux内核链表
1)链表简介链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。2)链表的分类和组成链表的最基本组成元素,节点每一个节点都是由数据域和指针域组成。 根据其不同,可以将链表分为单向链表、双向链表、双向循环原创 2016-07-22 18:15:20 · 618 阅读 · 2 评论 -
嵌入式学习-uboot-lesson14-LCD相关
关于LCD的相关知识在这里就不再说了,下面就直接开始对LCD进行编程分析。一、硬件结构 根据上面两幅图可以得知, 1.LCD的VD[0:23]一共24个引脚,接在GPI[0:15],GPJ[0:7] 这24个IO口上, 2.GPJ[8:11]分别接LCD的: GPJ8—-HSYNC:行(水平方向)同步信号 GPJ9—-VSYNC:场(垂直方向)同步信号 GPJ10—VDEN:video原创 2016-07-12 09:27:17 · 1328 阅读 · 0 评论