![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JZ2440开发板学习
jz2440开发板学习
李嘉图Y
凡是过往,皆为序章
展开
-
安装arm-linux-gcc-4.4.3
安装arm-linux-gcc-4.4.31、下载交叉编译工具交叉编译工具包可以去以下网址下载:arm-linux-gcc-4.4.3.tar.gz2、解压下载交叉编译工具到根目录下(或者自己其他路径,但是自己要记住,方便后面配置.bashrc环境变量):sudo tar zxvf arm-linux-gcc-4.4.3.tar.gz -C /然后进入:/opt/FriendlyAR...原创 2020-03-30 13:57:12 · 1308 阅读 · 0 评论 -
platform驱动编写
平台总线是一条虚拟总线。一边的“device”结构体和另一边的“较稳定的 drivice 代码”的联系:“device_add()”除了将“devcie”结构放到 bus 的“dev 链表”之外,还会从另一边的“drv”链表中取表元即某个“driver”结构,用总线里的一个(.match)函数来作比较,看另一边的“driver”是否支持一边的“device”。若是能够支持,则接着调用软件...原创 2019-08-14 17:36:07 · 726 阅读 · 0 评论 -
USB驱动中出现usb 1-1: device descriptor read/64的解决方法
自己编写的USB驱动,插入USB设备,出现:[root@Nision=W]#usb 1-1: new full speed USB device usings3c2410-ohci and address 2usb 1-1: device descriptor read/64, error -62usb 1-1: device descriptor read/64, error -62us...原创 2019-08-10 21:53:42 · 8821 阅读 · 0 评论 -
USB驱动编写_USB介绍
现象:把USB设备接到PC右下角弹出"发现android phone"跳出一个对话框,提示你安装驱动程序问1. 既然还没有"驱动程序",为何能知道是"android phone"答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"提示你安装的是"设备驱动程序" USB总线驱动程序负责:识别USB设备, 给U...原创 2019-08-10 22:01:21 · 570 阅读 · 0 评论 -
USB鼠标按键驱动
怎么写UAB驱动:1. 分配/设置usb_driver结构体/* 1. 分配/设置usb_driver结构体 */static struct usb_driver usbmouse_as_key_driver = { .name = "usbmouse_as_key", .probe = usbmouse_as_key_probe, .disconnect = usbmouse_...原创 2019-08-10 23:01:11 · 530 阅读 · 0 评论 -
块设备驱动之内存虚拟磁盘
块设备驱动框架一,层次框架:APP: open,read,write “1.txt”------------------------------------------ 文件读写文件系统:vfat,ext2,ext3,yaffs (把文件的读写转换成对扇区的读写)------------------ll_rw_block-------------- 扇区读写块设备驱动程序硬件:硬盘、...原创 2019-08-15 23:18:07 · 715 阅读 · 0 评论 -
块设备驱动之nand flash驱动
块设备驱动原创 2019-08-16 12:36:23 · 689 阅读 · 0 评论 -
USB摄像头驱动之实现数据传输_1框架
1.写代码(1)框架1.构造一个usb_driver2.设置probe:2.1. 分配video_device:video_device_alloc2.2. 设置.fops.ioctl_ops (里面需要设置11项)如果要用内核提供的缓冲区操作函数,还需要构造一个videobuf_queue_ops2.3. 注册: video_register_deviceid_table:...原创 2019-08-12 19:15:00 · 901 阅读 · 0 评论 -
USB摄像头驱动之实现数据传输2_实现简单函数
/* 参考 drivers/media/video/uvc下的一系列文件 */1、12个ioctl(1)查询属性,是否为摄像头设备/* A2 确定是不是视频设备*//* 参考uvc_v4l2.c文件的uvc_v4l2_do_ioctl函数 */static int myuvc_vidioc_querycap(struct file *file, void *fh, struct v...原创 2019-08-12 19:56:51 · 924 阅读 · 0 评论 -
USB摄像头驱动之实现数据传输3_设置参数
1、启动传输/* A11 启动传输 * 参考: uvc_video_enable(video, 1): * uvc_commit_video * uvc_init_video */static int myuvc_vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type...原创 2019-08-12 20:19:37 · 1884 阅读 · 0 评论 -
USB摄像头驱动之实现数据传输4_URB设置
1、分配和初始化URBstatic int myuvc_alloc_init_urbs(void){u16 psize;u32 size; int npackets; int i; int j; struct urb *urb;psize = wMaxPacketSize; /* 实时传输端点一次能传输的最大字节数 */ 1024size = ...原创 2019-08-12 21:48:03 · 1207 阅读 · 0 评论 -
USB摄像头驱动之设置属性
之前的程序只实现了数据的传输,在pc linux环境下智能看到摄像 头捕抓的数据,不能调节亮度等属性。1.设置属性(1)应用程序xawtv部分分析先看APP以确定需要实现哪些接口xawtv.c:grabber_scanng_vid_open//对ng_vid_drivers链表的每一个成员都取出来,调用其open函数v4l2_driver.open //v4l2_driver结构体...原创 2019-08-12 22:04:50 · 2332 阅读 · 0 评论 -
网卡设备驱动之虚拟网卡
网卡驱动程序框架网卡驱动程序“收发功能”:只要把上层的数据发给网卡,从网卡来的数据构造成包给上层即可。网卡只需要“socket”编程,不需要打开某设备。驱动程序都是以面向对象的思想写的,都有相关的结构体。编程步骤1,分配某结构体:net_device2,设置结构体。①,提供一个发包函数:hard_start_xmit()②,提供收包的功能 : net_interrupt(int ...原创 2019-08-17 16:13:37 · 1530 阅读 · 1 评论 -
网卡设备驱动之移植dm9000c网卡驱动
DM9000C 确定相异性差异性 和 寄存器设置:DM9000C 并不能使用内核提供的驱动,所以要从厂家提供的 DM9000C 的驱动上移植:一,分析厂家提供的 DM9000C 网卡驱动程序:若定义了宏“MODULE”才会使用到初始化“init_module”函数。1,入口函数:2,dmfe_probe1 函数:设置 硬件 。网卡接口与内存接口一样,所以只需要去读某个地址即可...原创 2019-08-17 16:53:10 · 608 阅读 · 0 评论 -
输入子系统编写按键驱动
回顾:以中断方式处理的“按键驱动”程序。1,确定主设备号。2,构造一个“file_operations”结构体。3,open 函数中申请中断:4,read 函数中,若没有按键按下就休眠:有按键按下后,中断程序被调用:在中断服务程序里确定是哪个按键按下。最后唤醒按键程序:而这个驱动的测试程序是:1,先 open 某个设备文件:2,接着读:上面的驱动程序和测试程序的缺点:上面打开了...原创 2019-08-14 16:16:44 · 403 阅读 · 0 评论 -
字符设备驱动之定时器
一,定时器:引入这个概念将“抖动”去掉定时器有两个概念:1,超时时间:2,时间到了之后的“处理函数”。可以在中断处理中,如定时 10ms 后处理确定按键值上报。产生中断在中断中加定时器,当遇到 A 中断时加一个 10ms 的定时器,过了 10ms 后就去执行“处理函数”(确定按键值上报)。因为机械的抖动会非常快,没等到 10ms 后的处理,这时因为抖动又来了一个中断 B,这时中断...原创 2019-08-14 11:17:14 · 442 阅读 · 0 评论 -
实现电子书设计
框架分析怎样在LCD上显示文件:1)去文件中获得编码2)根据编码得到字体的点阵3)把点阵在LCD上显示出来以面向对象的思想,也会是模块化的思想进行程序设计对于我们分析的在LCD上显示文件的三个步骤,每一个步骤都抽象成一个模块。例如获得编码模块:我们知道对于不同的编码方式,都有不同的获得文件编码的方法,如ASCII码、UTF-8GBK码等,对于每一种编码我们都要编写一个.c文件,对...原创 2019-08-02 21:22:07 · 822 阅读 · 0 评论 -
ubuntu12.04下安装tslib出现./autogen.sh: 4: ./autogen.sh: autoreconf: not found
韦东山的教程说的是直接执行命令 ./autogen.sh就可以了,后来我执行出错:./autogen.sh: 4: ./autogen.sh: autoreconf: not found上网查了查说是我的版本没有安装automake工具。解决方法如下先后执行命令:sudo apt-get install autoconfsudo apt-get install automakesud...原创 2019-07-25 17:17:16 · 545 阅读 · 0 评论 -
Linux下getopt()函数的使用
使用getopt函数是一个程序命令行解析的函数,它可以解析出输入的命令的参数和选项,需要包含unistd.h头文件int getopt(int argc,char * const argv[ ],const char * optstring);前两个参数大家不会陌生,就是main函数的两个参数!传进来的参数自然要有人接着!第三个参数是个字符串,看名字,我们可以叫他选项字符串(后面会说明)返...原创 2019-08-04 09:35:10 · 373 阅读 · 0 评论 -
通用Makefile(适用于工程中)
Makefile规则:目标 : 依赖 命令命令执行的条件:1.依赖文件的修改时间比目标文件的修改时间新;2.没有目标文件;接下来将一步一步从简单到复杂写一个通用的Makefile第一个Makefiletest:a.c b.c a.h gcc -o test a.c b.c第一个Makefile是一个最简单的Makefile第二个Makefiletest : a.o b.o...原创 2019-07-31 22:01:36 · 458 阅读 · 0 评论 -
jz2440开发板LCD驱动
核心层的代码以fbmem.c为主,核心层包括许多与具体硬件无关的代码,并且提供了API给用户空间。用户空间使用系统调用,系统调用会使用相应的API函数,最后会调用驱动层实现功能。最终操作到硬件,对于不同的设备,驱动层的代码将有所不同。要写LCD驱动就要先从内核中找到支持LCD的软件相关的部分,也就是fbmem.c文件。fbmem.c作为LCD的软件部分为其提供了代码不变的部分,即在入口函数...原创 2019-08-05 13:58:23 · 991 阅读 · 0 评论 -
字符编码
字符编码通过串口发送数据的工作流程,我们可以理解字符编码的意义当我们的开发板通过串口向电脑发送一个字符串时,假如要发送copy这个字符串copy这个字符串在计算机中存储的格式是一串0101的数值,43 6E 70 79第一个字符‘c’在内存中占据一个字节来表示,也就是8位,在内存中的存储形式是0100 0011,也就是16进制的0x43同理第二个字符’o’,在内存中的存储形式是0110 ...原创 2019-08-01 13:10:10 · 729 阅读 · 0 评论 -
在LCD上显示英文和汉字
LCD工作时会在内存中的显存(framebuffer)中取出若干个字节来表示一个像素点,如此循环的吧显存中的点阵显示出来下面直接贴出代码,在代码中有详细的注释:int main(int argc,char **argv){ unsigned char str[] = "中"; //1.打开文fb0文件 //2.先获取LCD的相关信息,如分辨率等,可变信息和固定信息 fd_fb ...原创 2019-08-01 17:16:46 · 6596 阅读 · 2 评论 -
触摸屏驱动
输入子系统体系• 核心层: Linux_Dir/drivers/input/input.c(提供最核心函数)• 设备事件层: Linux_Dir/drivers/input/evdev.c(提供handler)提供输入设备产生的原始数据并上报给应用程序,这适用于所有输入设备, 该触摸屏也不例外编写基于输入子系统的驱动时只需:1.分配input_dev2.设置能产生什么事件和这类事件的...原创 2019-08-05 22:47:38 · 628 阅读 · 0 评论 -
摄像头驱动--V4L2框架
简单的字符设备驱动的框架复杂的字符设备驱动程序框架采用分层的思想,例如前面学习的LCD驱动程序,内核已经将构造file_operation结构体,注册字符设备驱动register_chrdevd,入口函数、出口函数这些有共性的部分都已经抽离出来了,形成的fbmem.c这样的文件,也就是核心层的代码部分,所有的frambuffer设备都可以在此基础上完成驱动的设计。这样一来对于LCD驱动就...原创 2019-08-06 17:15:16 · 1110 阅读 · 0 评论 -
字符设备驱动之poll机制
poll 机制分析所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用 open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。一、内核框架:对于系统调用 poll 或 select,它们对应的内核函数都是 sys_poll。分析 sys_poll,即可理解 ...原创 2019-08-13 21:36:58 · 433 阅读 · 0 评论 -
USB摄像头驱动框架
写一个USB摄像头驱动程序1.构造一个usb_driver2.设置probe:2.1. 分配video_device:video_device_alloc2.2. 设置.fops.ioctl_ops (里面需要设置11项)如果要用内核提供的缓冲区操作函数,还需要构造一个videobuf_queue_ops2.3. 注册: video_register_deviceid_tabl...原创 2019-08-07 12:27:31 · 612 阅读 · 0 评论 -
字符设备驱动之异步通知
一,应用程序主动的去查询或 read。1.查询方式:很占资源。2.中断机制:虽然有休眠,但在没有按键按下时 read()3.poll 机制:指定超时时间。以上都是“应用程序”主动去读或查询。二,异步通知:有按键按下了,驱动程序来提醒(触发)“应用程序”去进程之间发信号:kill -9 pidkill 是信号发送者,pid 具体进程是信号接收者。信号值是“9”“信号”与“中...原创 2019-08-13 22:50:55 · 381 阅读 · 0 评论 -
字符设备驱动之同步互斥阻塞
1. 原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量 v 并初始化为 0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_t *v); //原子变量增加 1void atomic_dec(atomic_t...原创 2019-08-14 00:35:06 · 364 阅读 · 0 评论 -
LCD上显示几行矢量文字
一、从左上角显示1)先描画第一行2)算出边框下面在lcd左上角上显示两行字符/* 清屏: 全部设为黑色 */ memset(fbmem, 0, screen_size); /* 显示矢量字体 */ error = FT_Init_FreeType( &library ); error = FT_New_Face( library, a...原创 2019-08-02 15:06:44 · 831 阅读 · 0 评论