![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 66
gxlovelxx
这个作者很懒,什么都没留下…
展开
-
linux2.6.32.71如何在lcd上显示内核启动信息
1、通过LCD显示内核启动信息之前内核通过串口打印内核信息时,内核命令行参数为:setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=10.199.172.70:/home/lesson/part4/rootfs ip=10.199.172.100:10.199.172.7原创 2016-05-11 19:59:11 · 924 阅读 · 0 评论 -
usb
usb设备逻辑结构:1.设备2.配置3.接口4.端点usb数据通信1.传输 2.事物 3包 4 域原创 2016-08-31 19:40:17 · 297 阅读 · 0 评论 -
字符驱动访问过程
1.字符驱动的访问都有一个统一的入口,位于arch/arm/kernel/entry_common.S的207行(我使用的linux-3.4.2)ENTRY(vector_swi) //入口subsp, sp, #S_FRAME_SIZEstmia sp, {r0 - r12}@ Calling r0 - r12 ARM( add r8, sp,转载 2016-08-22 16:38:40 · 218 阅读 · 0 评论 -
字符设备驱动访问原理
1.字符驱动的访问都有一个统一的入口,位于arch/arm/kernel/entry_common.S的207行(我使用的linux-3.4.2)ENTRY(vector_swi) //入口sub sp, sp, #S_FRAM原创 2016-08-22 16:45:07 · 274 阅读 · 0 评论 -
spi中的write和read的数据传输过程
从示意图中,我们可以很清除看到函数的调用过程:先调用spi设备驱动层,随后调用bitbang中间层,最后调用了master驱动层来完成数据的传输。read方法和write方法基本差不多,关键的区别在于其发送的数据为0,而在s3c24xx_spi_txrx中断服务程序中将读取数据寄存器。下面仅仅给出函数调用示意图。原创 2016-09-01 21:11:14 · 6279 阅读 · 0 评论 -
input输入子系统
输入子系统由驱动层、输入子系统核心、事件处理层三部分组成。一个输入事件,如鼠标移动、键盘按下等通过Driver->Inputcore->Event handler->userspace的顺序到达用户控件的应用程序。 驱动层:将底层的硬件输入转化为统一事件形式,想输入核心(Input Core)汇报。输入子系统核心:承上启下。原创 2016-08-25 14:13:30 · 283 阅读 · 0 评论 -
linux NAND驱动之一:内核中的NAND代码布局
在Linux 内核中,MTD 源代码放在/driver/mtd 目录中,该目录中包含chips 、devices 、maps 、nand 、onenand 和ubi 六个子目录。其中只有nand 和onenand 目录中的代码才与NAND 驱动相关,不过nand 目录中的代码比较通用,而onenand 目录中的代码相对于nand 中的代码而言则简化了很多,它是针对三星公司开发的另一类Flash转载 2016-09-06 21:44:02 · 428 阅读 · 0 评论 -
linux NAND驱动之二:NAND存储原理
在我们开始NAND 驱动编写之前,至少应该知道:数据在NAND 中是怎样存储的,以及以怎样的方式从NAND 中读写数据的。 NAND驱动之二:NAND存储原理" style="margin:0px; padding:0px; border:0px; list-style:none">1,NAND 的存储结构和操作方式转载 2016-09-06 21:45:45 · 551 阅读 · 0 评论 -
linux NAND驱动之三:6410平台上的NAND驱动加载
1,platform_driver 的定义和注册 在s3c_nand.c中,static struct platform_driver s3c6410_nand_driver = { .probe = s3c6410_nand_probe, .remove = s3c_nand_remove,转载 2016-09-06 21:46:31 · 273 阅读 · 0 评论 -
linux NAND驱动之四:6410上的NAND读写流程
MTD对NAND芯片的读写主要分三部分: NAND驱动之四:6410上的NAND读写流程" style="margin:0px; padding:0px; border:0px; list-style:none"> A、struct mtd_info中的读写函数,如read,write_oob等,这是MTD原始设备层与FLASH硬件层之间的接口;转载 2016-09-06 21:47:26 · 556 阅读 · 0 评论 -
linux NAND驱动之六:NAND驱动的probe流程
由前面的说明可知,我们在要对NAND 芯片进行实际操作前已经为struct mtd_info 、struct mtd_partition 和struct nand_chip 这三个结构体分配好了内存,接下来就要为它们做一些初始化工作。 其中,我们需要为struct mtd_info 所做的初始化工作并不多,因为MTD Core 会在稍后为它做很多初始化工作(这些工作在nand_scan_tai转载 2016-09-06 21:48:24 · 428 阅读 · 0 评论 -
linux NAND驱动之五:NAND驱动中probe和nand_chip结构体
在基于MTD 的NAND driver 的probe 函数中,主要可以分为两部分内容,其一是与很多外设driver 类似的一些工作,如申请地址,中断,DMA 等资源,kzalloc 及初始化一些结构体,分配DMA 用的内存等等;其二就是与MTD 相关的一些特定的工作,在这里我们将只描述第二部分内容。(1)probe 函数中与MTD 相关的结构体 在probe 函数中,我们需要转载 2016-09-06 21:49:20 · 379 阅读 · 0 评论 -
linux中的互斥途径
一:中断屏蔽(不推荐使用)可以使进程与进程间的并发不在发生二:自旋锁:1自旋锁,2读写自旋锁,3顺序锁,4rcu1:自旋锁实际是忙等待,当锁不可用时,cpu一直循环执行,测试并设置锁直到可用而取得锁,在忙等是不可以做任何事,仅仅是等待,所以只有在占用锁的时间极短的情况下使用才合理。2:自旋锁可能导致系统锁死:原因:1,递归使用一个自旋锁,即如果一个已经拥有该锁的cpu想第二次获得这原创 2016-09-07 19:41:36 · 647 阅读 · 0 评论 -
linux设备中的阻塞与非阻塞io
1:阻塞与非阻塞io阻塞操作:执行设备操作时若不能获得资源则挂起进程(进程进入休眠状态,将cpu资源让给其他进程),知道满足条件后在执行!唤醒睡眠的进程的地方最大可能发生在中断中,因为硬件资源的获得一般伴随着一个中断。非阻塞:进程不能进行设备操作时并不挂起,它或者放弃,如果用户要获取设备资源,只能不停的轮训查询,直到可以操作位置(消耗cpu资源)。2:等待队列原创 2016-09-07 21:59:20 · 420 阅读 · 0 评论 -
volatile关键字的作用
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo原创 2016-10-10 17:28:17 · 507 阅读 · 0 评论 -
多线程与多进程的介绍和区别
关于多线程与多进程的介绍和区别,可以参见http://blog.csdn.net/luoweifu/article/details/46595285(阳光日志《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》),这篇博文讲的非常不错,通俗易懂。由于老师项目的原因,多线程会用的多一些,多进程只在小的demo中使用过,对外声称自己会多线程多进程编程,可是在腾讯电面转载 2016-10-10 18:42:09 · 326 阅读 · 0 评论 -
USB子系统
http://blog.csdn.net/leesagacious/article/details/50890858usb_debugfs_initbus_registerbus_register_notifier内核通知链U盘驱动usb_debugfs_init/** 这个函数主要做了一下事情: 在de转载 2016-08-31 18:43:41 · 306 阅读 · 0 评论 -
"阻塞--中断"驱动模型在i2c在子系统、uart驱动、spi子系统中的实现
最近总结了这个kernel中的这个模型,下面我们 开始欣赏吧。先看i2c中的实现阻塞的过程唤醒的过程实验验证UART中的实现实验验证spi中的实现实验验证我们需要明白的是 : 1. 进程为什么要阻塞 2. 阻塞后又是 在什么时候被唤醒的? 3. 从阻塞到唤醒 这中间的过程 是怎么样的 ? 先上一符图 阻转载 2016-08-31 18:37:44 · 335 阅读 · 0 评论 -
spi/i2c调用框架
1.板级信息中通过 spi_register_board_info来添加设备drivers/spi/spi.c: spi_register_board_info /* 对于每一个spi_master,调用spi_match_master_to_boardinfo */ list_for_each_entry(master, &spi_master_原创 2016-08-31 14:26:31 · 401 阅读 · 0 评论 -
移植linux-2.6.32.71问题解决办法
根据网友们遇到的这个共同问题,总结一下各种解决的办法。遇到这样问题的网友可以根据下面的建议逐个检查。1. bin/busybox文件是可以执行的。2. 在配置busybox的时候要选中shell选项中的一个选项3. linuxrc 是可执行的。4. 制作文件系统的时候利用的工具也要留意区分: mkcramfs 制作cramfs镜像的工转载 2016-05-06 18:51:23 · 353 阅读 · 0 评论 -
linux内核开机logo显示几分钟之后黑屏解决办法
因为PC Linux有setterm, 自己搞的系统可不见得有。解决办法有两种:1:进入drivers/char/vt.c中将blank_screen_t( )函数内容注释掉,重新编译内核后,系统开机后LCD没有出现屏幕不受控制的情况了2:编写应用程序:#include #include #include void main(){int fd; f原创 2016-05-09 18:43:50 · 3886 阅读 · 0 评论 -
同步IO与异步IO的区别
同步IO与异步IO的区别 首先要明确一点:不同IO模型之间的差别本质上是CPU的参与方式 这里重点说一下各自的应用场景 如何选择同步还是异步呢? 主要有这么几个指标供参考 1. 并发数量 2. 接收字节数 3. 处理请求所需CPU时间 我们一个一个来考察 并发数 并发低的时候同步IO与异步IO差别不大 并发高时差别会比较明显,这要表现在转载 2016-06-06 10:25:53 · 284 阅读 · 0 评论 -
TQ2440 PWM驱动程序设计(内核2.6.30.4)
PWM驱动程序设计(内核2.6.30.4) 原文出自http://blog.chinaunix.net/uid-25577798-id-1761435.html下面是以TQ2440开发板为基础的硬件电路图: 在驱动程序里面首先初始化该PWM所对应的管脚的功能,然后初始化定时器设置对PWM的定时,最后启动PWM功能。由硬件图可知蜂鸣器是由TOUT0(GPB0)控转载 2016-06-27 15:47:09 · 549 阅读 · 0 评论 -
快速实现ARM和DSP的通信和协同工作(转)
快速实现ARM和DSP的通信和协同工作(转) (2012-05-29 14:42:45)转载▼标签: dsp 达芬奇开发流程 it分类: 达芬奇平台DSP快速实现ARM和DSP的通信和协同工作 2010-09-29 21:13:53| 分类: DSP |字号 订阅转载 2016-06-27 21:32:34 · 1074 阅读 · 0 评论 -
lcd驱动
LCD是Liquid Crystal Display的简称,也就是经常所说的液晶显示器LCD能够支持彩色图像的显示和视频的播放,是一种非常重要的输出设备 Framebuffer 是Linux系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行操作 Framebuffer又叫帧缓冲,是L转载 2016-08-27 21:07:36 · 451 阅读 · 0 评论 -
字符设备驱动
字符设备驱动内核提供三种注册方法: *2.6以前老版本注册方式 register_chrdev (unsigned int major, const char *name, struct file_operations*fops);//他只分配主设备号。从设备号在mknod的时候指定 register_chrdev函数的major参数原创 2016-08-28 10:02:00 · 329 阅读 · 0 评论 -
互斥和同步
为什么要用到互斥,是由于cpu调度引起来的,任何一个进程或线程随时都有可能被终止, 运行另一个进程和线程,假如两个进程同时操作一个共享资源(全局变量),就可能引起问题. 驱动里的互斥主要有两种方法: 信号量 和 自旋锁 信号量: (休眠了) void sema_init (struct semaphore *sem, int val);转载 2016-08-28 10:10:28 · 353 阅读 · 0 评论 -
应用:线程同步
正式开始之前先简单的解释捋捋几对概念同步/异步: 打电话和发短信阻塞/非阻塞:它们是程序在等待消息(无所谓同步或者异步)时的状态.A. 阻塞阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。转载 2016-08-28 10:21:25 · 303 阅读 · 0 评论 -
spi驱动
转载地址:http://www.embedu.org/Column/Column367.htm作者:刘洪涛,华清远见嵌入式学院讲师。一、概述基于子系统去开发驱动程序已经是linux内核中普遍的做法了。前面写过基于I2C子系统的驱动开发。本文介绍另外一种常用总线SPI的开发方法。SPI子系统的开发和I2C有很多的相似性,大家可以对比学习。本主题分为两个部分叙述,第一部分介绍基转载 2016-08-28 18:15:24 · 397 阅读 · 0 评论 -
线程池技术
1:初始化线程池void pool_init (int max_thread_num) 1.1:创建线程池pthread_create (&(pool->threadid[i]), NULL, (void *)thread_routine, NULL); 1.2:执行线程函数void * thread_routine (void *arg) //线程池初始化void pool_in原创 2016-08-19 18:05:39 · 236 阅读 · 0 评论 -
epoll机制
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。epoll的接原创 2016-08-19 21:46:39 · 372 阅读 · 0 评论 -
module_platform_driver的作用
该函数实际是一个宏,它在include/linux/platform_device.h中定义如下:[cpp] view plain copy /* module_platform_driver() - Helper macro for drivers that don't do * anything special in转载 2016-08-30 20:27:49 · 1231 阅读 · 0 评论 -
spi子系统调用流程
spi驱动:1.注册platform_device在arch/arm/mach-s3c2440/smdk2440.c 中注册platform_device ,其中s3c2410_spi_info 作为platform_device.private_data. platform_device.name 为"s3c2410-spi".2:在arch/arm/mach-s3c原创 2016-08-30 20:31:49 · 695 阅读 · 0 评论 -
linux下tty子系统框架分析(linux3.4.2)
这里以S3C2440为例说明内核里面的串口驱动结构,这里也是用的虚拟总线,一边设备,一边驱动,两个名字匹配上就调用probe 函数。另外一个uart是tty设备的一种,注册一个uart就是注册一个tty,而一个平台往往对uart有统一抽象的操作,所以uart的驱动都统一了,这里的是uart_ops结构体;所以重点关心tty设备,注册uart设备通过uart_add_one_port 函数。下面看下原创 2016-11-04 14:42:15 · 1329 阅读 · 0 评论