11 2019 档案

摘要:使用Buildroot生成整个嵌入式工程 $ unzip mirrors-buildroot-2019.08.x.zip $ cd ./buildroot/ $ make list-defconfigs $ make freescale_imx6dlsabresd_defconfig $ make 阅读全文
posted @ 2019-11-17 22:15 Lilto 阅读(180) 评论(0) 推荐(0) 编辑
摘要:$ sudo vim /etc/profile export PATH=$PATH:/work/buildroot/output/host/usr/bin $ source /etc/profile $ arm-linux-gcc -v 阅读全文
posted @ 2019-11-17 22:14 Lilto 阅读(215) 评论(0) 推荐(0) 编辑
摘要:详情请参考: http://www.buildroot.org/downloads/manual/manual.html 参考博客: https://www.cnblogs.com/arnoldlu/p/9553995.html Buildroot是一个为嵌入式平台构建一个完整Linux系统的工具,它可以生成交叉编译工具、文件系统、Linux内核和bootloader。 ... 阅读全文
posted @ 2019-11-17 22:13 Lilto 阅读(846) 评论(0) 推荐(0) 编辑
摘要:平台: 飞凌IMX6DL Buildroot版本: mirrors-buildroot-2019.08.x 说明: 以freescale_imx6dlsabresd为模板,使用Buildroot构建一个嵌入式系统工程,使用构建好的交叉编译工具,并且以工程获取的源码作为移植基础。 具体配置信息: Target options ... 阅读全文
posted @ 2019-11-17 22:11 Lilto 阅读(310) 评论(0) 推荐(0) 编辑
摘要:消除抖动的实现方法 在发生中断后,延时一段时间(抖动时间t),再去读取按键值; 这里实现这段延时的方法就是使用定时器; 当按键发生中断时,启动定时器,定时器延时t秒后,再读取键值。 实例 driver.c 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 ... 阅读全文
posted @ 2019-11-17 21:55 Lilto 阅读(2580) 评论(0) 推荐(0) 编辑
摘要:①轮询:应用程序不断read;驱动程序不断read,占用大量的cpu资源。 ②中断:应用程序阻塞在read;驱动程序休眠,只有发生中断时,驱动程序唤醒,读取键值,返回给应用程序;应用程序执行下一步。 ③poll:应用程序在一定的时间内(用户定义),不断检测用户设置的flag,超时执行下一步;驱动程序在发生中断时,标记用户设置的flag。 ④async:应用程序不会阻塞,不影响当前进程的其他任务的执... 阅读全文
posted @ 2019-11-17 21:53 Lilto 阅读(259) 评论(0) 推荐(0) 编辑
摘要:DM9000移植 uboot下参数设置 原理图及管脚说明 IOR# —— Processor Read Command IOW# —— Processor Write Command CS# —— Chip Select CMD —— Command Type INT ... 阅读全文
posted @ 2019-11-17 21:52 Lilto 阅读(621) 评论(0) 推荐(0) 编辑
摘要:实现 使驱动程序只能同时被一个应用程序操作。 幕后:m+1 ①把变量m加载到寄存器 ②执行寄存器运算,并把运算结果保存到 ③把运算结果写回内存 单任务系统 当应用程序open某个驱动时,只需使用一个全局变量标记,再有其他应用程序打开这个驱动时,则直接退出(打开失败)。 多任务系统 由于修改变量的值,并不是一步到位的,而是需要使用多个指令,才能完成最终的操作; ... 阅读全文
posted @ 2019-11-17 21:39 Lilto 阅读(154) 评论(0) 推荐(0) 编辑
摘要:框架分析 转载自:https://www.cnblogs.com/big-devil/p/8590063.html 背景 内核的输入子系统是对"分散的、多种不同类别"的输入设备(键盘,鼠标,跟踪杆,触摸屏,加速度计等)进行"统一处理"的驱动程序。 具有如下特点: 1、统一各种形态各异的相似的输入设备的处理功能(鼠标,不论是PS/2形的鼠标,还是usb形式的鼠标,还是蓝牙形式的鼠... 阅读全文
posted @ 2019-11-17 21:31 Lilto 阅读(611) 评论(0) 推荐(0) 编辑
摘要:驱动相关:硬件之上的软件层,负责底层硬件与用户程序的交互 设备相关:底层设备的硬件操作 总线:匹配设备和驱动 设备驱动分层的思想:为同一类设备设计一个框架,而框架中的核心层则实现了该设备的一些通用功能。 阅读全文
posted @ 2019-11-17 21:23 Lilto 阅读(291) 评论(0) 推荐(0) 编辑
摘要:Makefile: 1 obj-m += xxx.o 2 3 KERN_DIR = /work/system/linux-2.6.22.6 4 5 PWD = $(shell pwd) 6 7 all: 8 make -C $(KERN_DIR) M=$(PWD) modules 9 10 clean:11 make -C $(KERN_DIR) M=$(PWD) modules clea... 阅读全文
posted @ 2019-11-17 21:20 Lilto 阅读(1275) 评论(0) 推荐(0) 编辑
摘要:版本:linux-2.6.24.4 宏: MKDEV(MAJOR, MINOR); 说明: 获取设备在设备表中的位置。 MAJOR主设备号 MINOR次设备号 内核使用的版本号说明文件: 在内核 /Documentation 目录下的 devices.txt 有说明。 一般本地保留的 MAJOR 234-239 ... 阅读全文
posted @ 2019-11-17 21:17 Lilto 阅读(5557) 评论(0) 推荐(0) 编辑
摘要:S3C2440A Memory Map after Reset S3C2440的内存空间划分为不同的块,当CPU向内存控制器发出地址,内存控制器根据地址范围,发出对应片选信号到片选引脚,实现对不同设备的控制。 BANK0 BUS WIDTH The data bus of BANK0 (nGCS0) should be configured with a width as one of... 阅读全文
posted @ 2019-11-17 21:15 Lilto 阅读(335) 评论(0) 推荐(0) 编辑
摘要:for (i = 0; i bi_bdev); // 找到队列 // 调用队列的"构造请求函数" ret = q->make_request_fn(q, bio); ... 阅读全文
posted @ 2019-11-17 21:10 Lilto 阅读(190) 评论(0) 推荐(0) 编辑
摘要:应用程序通过标准接口(C Library)调用驱动程序。 C Library 通过 swi 指令进入内核。 字符设备的注册 int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops) a、函数说明: Param1:主设备号 Param... 阅读全文
posted @ 2019-11-17 21:04 Lilto 阅读(1208) 评论(0) 推荐(0) 编辑
摘要:硬件配置 硬件原理 ADC AND TOUCH SCREEN INTERFACE SPECIAL REGISTERS 程序框架 软件架构:输入子系统 优化措施 ①问题:ADC转换出来的值变化太大,不稳定; 原因1:触摸屏被"触摸",触摸点电压值尚未稳定,已经被ADC转换成数字量; 改善1:设置ADC 阅读全文
posted @ 2019-11-17 20:51 Lilto 阅读(576) 评论(0) 推荐(0) 编辑
摘要:单片机下中断处理过程: ①按键按下 ②CPU发生中断,跳转到异常向量入口 ③跳转到中断处理函数 a、保存被中断的现场 b、执行中断处理函数 c、恢复被中断现场 Linux下中断处理过程: ARM架构CPU的异常向量地址可以是0x00000000,也可以是0xFFFF0000。Linux内核使用的是0xFFFF0000(0xFFFF0000是一个虚拟地址)。因此,在建立虚拟地址映射之后... 阅读全文
posted @ 2019-11-17 20:46 Lilto 阅读(334) 评论(0) 推荐(0) 编辑
摘要:driver.c 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 12 static int major;13 14 static struct class *myKey_class;1... 阅读全文
posted @ 2019-11-17 20:42 Lilto 阅读(296) 评论(0) 推荐(0) 编辑
摘要:架构 USB的硬件识别原理 基本概念 ①如何区分不同的USB设备? 每个USB设备接入PC时,USB总线驱动程序都会给它分配一个编号(地址); 接在USB总线上的每一个USB设备都有自己的编号(地址); PC机想访问某个USB设备时,发出的命令都含有对应的编号(地址); 新接入的USB设备的设备编号(地址)是0,在未分配新编号之前,PC机使用0编号与其通信; ②USB为... 阅读全文
posted @ 2019-11-17 20:41 Lilto 阅读(421) 评论(0) 推荐(0) 编辑
摘要:poll机制的作用:使阻塞型函数超时返回,避免一直阻塞。 实例: driver.c 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 1... 阅读全文
posted @ 2019-11-17 20:35 Lilto 阅读(524) 评论(0) 推荐(0) 编辑
摘要:驱动框架 通过使用platform设备驱动框架,实现led驱动与设备操作的分离。 我们关注led_drv里面的 struct platform_driver led_drv里面的.probe函数,当有同名的device注册到内核,将运行这个driver的probe函数(同名的:led_dev里面的struct platform_device led_dev里面的.name与 struct p... 阅读全文
posted @ 2019-11-17 20:32 Lilto 阅读(440) 评论(0) 推荐(0) 编辑
摘要:驱动程序 1 /* 2 * 参考: 3 * .\linux-2.6.22.6\drivers\mtd\devices\mtdram.c 4 * .\linux-2.6.22.6\drivers\mtd\maps\physmap.c 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include... 阅读全文
posted @ 2019-11-17 20:30 Lilto 阅读(230) 评论(0) 推荐(0) 编辑
摘要:修改rcS启动脚本,使开发板初始化完成,自动挂载共享文件夹 修改开发板ip,使之与虚拟机处于同一网段(二者可以互ping) 挂载虚拟机的共享文件夹 rcS 1 ifconfig eth0 192.168.0.172 3 mount -a4 mkdir /dev/pts5 mount -t devpts devpts /dev/pts6 mount -t nfs -o no... 阅读全文
posted @ 2019-11-17 20:26 Lilto 阅读(776) 评论(0) 推荐(0) 编辑
摘要:硬件原理及分析 管脚说明 Pin NamePin FunctionR/B(RnB)The R/B output indicates the status of the device operation. When low, it indicates that a program, erase or random read operation is in process and... 阅读全文
posted @ 2019-11-17 20:23 Lilto 阅读(556) 评论(0) 推荐(0) 编辑
摘要:实现 ①编写驱动框架 ②编写硬件实现代码 (在Linux系统下操作硬件,需要操作虚拟地址,因此需要先把物理地址转换为虚拟地址 ioremap()) 如何实现单个灯的操作: 实现方法之一——操作次设备号 主设备号:用于查找对应的文件操作结构体; 次设备号:用于区分同类型设备下的不同设备; 实例 driver.c 1 #include 2 #include 3 #in... 阅读全文
posted @ 2019-11-17 20:17 Lilto 阅读(293) 评论(0) 推荐(0) 编辑
摘要:参考文档:《液晶屏.pdf》《S3C2440用户手册》《JZ2440-V3原理图》 frame buffer: 显存,用于存放LCD显示数据;frame buffer通过LCD控制器和LCD Panel建立一一映射关系; LCD控制器: 参考LCD用户手册,配置LCD控制器,用于发出LCD控制信号,驱动LCD显示; 扫描方向: ... 阅读全文
posted @ 2019-11-17 20:15 Lilto 阅读(6371) 评论(0) 推荐(0) 编辑
摘要:前言 使用标准SPI指令格式; 3字节地址模式或4字节地址模式; 支持SPI 总线 模式0 和 模式3; 存储容量32MB; 时钟频率范围:80Mhz – 104Mhz; 主机:STM32F103ZET6;主机的SPI总线模式应该与从机的SPI总线模式保持一致; 电路原理 内存组织 状态寄存器和扩展地址寄存器 ... 阅读全文
posted @ 2019-11-17 18:13 Lilto 阅读(8323) 评论(0) 推荐(0) 编辑
摘要:(一)基本概念 对并发的管理是操作系统编程领域中的核心问题之一。 设备驱动程序开发者必须在开始设计时就考虑到并发因素,并对内核提供的并发管理机制有深刻的认识。 竞态:竞争状态; 引发竞态的原因是:并发式访问同一共享资源: ①多线程并发访问; ②抢占式并发访问; ③中断程序并发访问; ④SMP(Symmetric Multi-Processing)核间并发访问; 竞态造成的影响:处于竞态... 阅读全文
posted @ 2019-11-17 18:10 Lilto 阅读(403) 评论(0) 推荐(0) 编辑
摘要:重要概念: dev_t:内核中用来表示设备编号的数据类型 通过设备编号获得主、次设备号 1 //dev_t dev;2 #define MAJOR(dev)((unsigned int) ((dev) >> MINORBITS))3 #define MINOR(dev)((unsigned int) ((dev) & MIN... 阅读全文
posted @ 2019-11-17 16:20 Lilto 阅读(154) 评论(0) 推荐(0) 编辑
摘要:编写驱动程序的第一步:定义驱动程序为用户程序提供的能力(机制)! a、模块运行于内核空间 应用程序运行于用户空间 b、模块运行时,分配的栈很小,注意栈溢出; c、具有两个下划线前缀(__)的函数,通常是底层组件的接口,需要谨慎使用; d、内核符号表 公共内核符号表用于解释模块内未定义的符号,它包含了所有的全局内核项(函数和变量) 的地址;导出... 阅读全文
posted @ 2019-11-17 15:53 Lilto 阅读(236) 评论(0) 推荐(0) 编辑
摘要:原理:不管开发板是通过直连、路由器还是交换机连接到PC机,最终都是接到PC的以太网网卡(对笔记本来说,一般存在两个网卡,一个WIFI网卡和以太网网卡);因此要实现PC机与虚拟机的互ping,必须把虚拟机桥接到PC机的以太网网卡;如果笔记本使用WIFI上网(仅连接外网的是WIFI网卡),如何实现虚拟机上网呢?给虚拟机添加一个网卡,通过NAT模式,共享主机IP! 目标:在WIFI模式下,既可以使... 阅读全文
posted @ 2019-11-17 15:25 Lilto 阅读(6302) 评论(0) 推荐(0) 编辑
摘要:问题: 解决: 重启Centos,使用root登陆; 阅读全文
posted @ 2019-11-17 15:22 Lilto 阅读(4221) 评论(0) 推荐(0) 编辑
摘要:yum install gpm* service gpm start systemctl enable gpm.service 阅读全文
posted @ 2019-11-17 15:21 Lilto 阅读(926) 评论(0) 推荐(0) 编辑
摘要:在WIFI模式下,既可以使用ping开发板,又可上网。 目标:ubuntu1804下使用两个网卡 网卡(eth0):用于桥接主机的物理网卡 网卡(eth1):用于NAT模式下共享主机IP,用于上网。 一 在虚拟机端添加一个虚拟网卡 Ubuntu下修改网卡配置: sudo vi /etc/network/interfaces auto... 阅读全文
posted @ 2019-11-17 15:19 Lilto 阅读(2440) 评论(0) 推荐(0) 编辑
摘要:归档:也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。 归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。 压缩:压缩文件也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件采用了不同的存储方式,使其所占用的磁盘空间比集合中所有文件大小的总和要小。 tar:该命令可以将许多文件一起保存到一个单独的磁带或磁... 阅读全文
posted @ 2019-11-17 15:15 Lilto 阅读(773) 评论(0) 推荐(0) 编辑
摘要:参考自: https://www.jianshu.com/p/f6e0debb5e1f https://blog.csdn.net/qq_31041847/article/details/90211464 原文设置repo使用镜像需要FQ才能下载使用,基于原文修改镜像源为清华镜像,另修改build-dir/conf/local.conf配置文件加快yocto编译速度,亲测可用。 ... 阅读全文
posted @ 2019-11-17 15:14 Lilto 阅读(2910) 评论(0) 推荐(0) 编辑
摘要:进入系统引导前,长按shift键: 选择第一条,按e进入编辑 添加完成后,只需按下 CTRL+x 或 F10 即可继续启动救援模式 接下来,输入以下命令将根 (/) 文件系统重新挂载成读/写模式: mount -n -o remount,rw / 阅读全文
posted @ 2019-11-17 15:12 Lilto 阅读(1511) 评论(0) 推荐(0) 编辑
摘要:https://computingforgeeks.com/configure-nfs-client-on-centos-rhel/ 阅读全文
posted @ 2019-11-17 15:08 Lilto 阅读(171) 评论(0) 推荐(0) 编辑
摘要:https://computingforgeeks.com/install-and-configure-nfs-server-on-centos-rhel/ 阅读全文
posted @ 2019-11-17 15:06 Lilto 阅读(260) 评论(0) 推荐(0) 编辑
摘要:结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。看下面这样的一个结构体: struct stu1 { int i; //偏移量为0 char c; //第一个成员的偏移量加上第一个成员的大小(0+4) int j; //第二个成员的偏移量加上第二个成员的大... 阅读全文
posted @ 2019-11-17 14:52 Lilto 阅读(666) 评论(0) 推荐(0) 编辑
摘要:按位与:通常用来对某些位清0,或者保留某些位 按位或:用来将某些位置1,或者保留某些位 按位异或:用来将某些二进制位反转 左移运算符>:用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补0或1。如果数据的最高位是0,那么就补0;如果最高位是1 ,那么就补1;如果被丢弃的低位不包含 1,那么右移 n 位相当于除以 2 的 n 次方(但被移除的位中经常会包含 1) 阅读全文
posted @ 2019-11-17 14:52 Lilto 阅读(102) 评论(0) 推荐(0) 编辑
摘要:编程分为两类:系统编程(system programming)和应用编程(application programming)。 所谓系统编程,简单来说,就是编写库;而应用编程就是利用写好的各种库来编写具某种功用的程序,也就是应用。系统程序员会给自己写的库留下一些接口,即API(application programming interface,应用编程接口),以供应用程序员使用。所以在抽象层的图示里... 阅读全文
posted @ 2019-11-17 14:49 Lilto 阅读(686) 评论(0) 推荐(0) 编辑
摘要:在讨论二维指针时,我们可以把二维指针看成由多个一维指针构成,然后对他进行理解。 由一个简单的表格: 该图表示二维数组地址、二维数组名、一维数组地址、一维数组名、元素地址、元素的关系图: 他们之间的关系:二维数组地址代表这个二维数组的地址,二维数组名表示二维数组名同时也存储了一维数组的地址,一维数组名也存储了元素的地址,(注:二维数组的地址和一维数组的地址和数组首个元素的地址他们的值相同... 阅读全文
posted @ 2019-11-17 14:42 Lilto 阅读(698) 评论(0) 推荐(0) 编辑
摘要:1 struct file_operations { 2 struct module *owner; 3 loff_t (*llseek) (struct file *, loff_t, int); 4 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 5 ... 阅读全文
posted @ 2019-11-17 14:41 Lilto 阅读(166) 评论(0) 推荐(0) 编辑
摘要:每种C和C++的实现支持对其宿主机或操作系统唯一的功能。例如,一些程序需要精确控制超出数据所在的储存空间,或着控制特定函数接受参数的方式。#pragma指示使每个编译程序在保留C和C++语言的整体兼容性时提供不同机器和操作系统特定的功能。编译指示被定义为机器或操作系统特定的,并且通常每种编译程序是不同的。 语法: #pragma token_string "token_string"是一系列字符用... 阅读全文
posted @ 2019-11-17 14:38 Lilto 阅读(3056) 评论(0) 推荐(0) 编辑
摘要:.\linux-2.6.22.6_vscode\include\linux\list.h#ifndef _LINUX_LIST_H#define _LINUX_LIST_H#ifdef __KERNEL__ #include #include #include #include /* * Simple doubly linked list implementation. * * Som... 阅读全文
posted @ 2019-11-17 14:36 Lilto 阅读(185) 评论(0) 推荐(0) 编辑
摘要:1、getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了。 getch()和getche()是conio.h中的库函数,它的作用是从键盘接收字符,getchar带有回显。 与前面两个函数的区别在于: getchar()函数等待输入直到按回车才结束(前提是缓冲区没有数据),回车前... 阅读全文
posted @ 2019-11-17 14:34 Lilto 阅读(679) 评论(0) 推荐(0) 编辑
摘要:函数原型: int printf(const char *format[,argument]...) 返 回 值: 成功则返回实际输出的字符数,失败返回-1. 函数说明: 使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用"…"表示),format后面的参数个数不确定,且类型也不确定,这些参数都存放在栈内。而程序员又可以用各种方式来调用printf... 阅读全文
posted @ 2019-11-17 14:31 Lilto 阅读(1925) 评论(0) 推荐(0) 编辑
摘要:相当于宏定义NULL 阅读全文
posted @ 2019-11-17 14:29 Lilto 阅读(166) 评论(0) 推荐(0) 编辑