摘要:
使用Buildroot生成整个嵌入式工程 $ unzip mirrors-buildroot-2019.08.x.zip $ cd ./buildroot/ $ make list-defconfigs $ make freescale_imx6dlsabresd_defconfig $ make 阅读全文
摘要:
$ sudo vim /etc/profile export PATH=$PATH:/work/buildroot/output/host/usr/bin $ source /etc/profile $ arm-linux-gcc -v 阅读全文
摘要:
详情请参考: http://www.buildroot.org/downloads/manual/manual.html 参考博客: https://www.cnblogs.com/arnoldlu/p/9553995.html Buildroot是一个为嵌入式平台构建一个完整Linux系统的工具,它可以生成交叉编译工具、文件系统、Linux内核和bootloader。 ... 阅读全文
摘要:
平台: 飞凌IMX6DL Buildroot版本: mirrors-buildroot-2019.08.x 说明: 以freescale_imx6dlsabresd为模板,使用Buildroot构建一个嵌入式系统工程,使用构建好的交叉编译工具,并且以工程获取的源码作为移植基础。 具体配置信息: Target options ... 阅读全文
摘要:
消除抖动的实现方法 在发生中断后,延时一段时间(抖动时间t),再去读取按键值; 这里实现这段延时的方法就是使用定时器; 当按键发生中断时,启动定时器,定时器延时t秒后,再读取键值。 实例 driver.c 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 ... 阅读全文
摘要:
①轮询:应用程序不断read;驱动程序不断read,占用大量的cpu资源。 ②中断:应用程序阻塞在read;驱动程序休眠,只有发生中断时,驱动程序唤醒,读取键值,返回给应用程序;应用程序执行下一步。 ③poll:应用程序在一定的时间内(用户定义),不断检测用户设置的flag,超时执行下一步;驱动程序在发生中断时,标记用户设置的flag。 ④async:应用程序不会阻塞,不影响当前进程的其他任务的执... 阅读全文
摘要:
DM9000移植 uboot下参数设置 原理图及管脚说明 IOR# —— Processor Read Command IOW# —— Processor Write Command CS# —— Chip Select CMD —— Command Type INT ... 阅读全文
摘要:
实现 使驱动程序只能同时被一个应用程序操作。 幕后:m+1 ①把变量m加载到寄存器 ②执行寄存器运算,并把运算结果保存到 ③把运算结果写回内存 单任务系统 当应用程序open某个驱动时,只需使用一个全局变量标记,再有其他应用程序打开这个驱动时,则直接退出(打开失败)。 多任务系统 由于修改变量的值,并不是一步到位的,而是需要使用多个指令,才能完成最终的操作; ... 阅读全文
摘要:
框架分析 转载自:https://www.cnblogs.com/big-devil/p/8590063.html 背景 内核的输入子系统是对"分散的、多种不同类别"的输入设备(键盘,鼠标,跟踪杆,触摸屏,加速度计等)进行"统一处理"的驱动程序。 具有如下特点: 1、统一各种形态各异的相似的输入设备的处理功能(鼠标,不论是PS/2形的鼠标,还是usb形式的鼠标,还是蓝牙形式的鼠... 阅读全文
摘要:
驱动相关:硬件之上的软件层,负责底层硬件与用户程序的交互 设备相关:底层设备的硬件操作 总线:匹配设备和驱动 设备驱动分层的思想:为同一类设备设计一个框架,而框架中的核心层则实现了该设备的一些通用功能。 阅读全文
摘要:
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... 阅读全文
摘要:
版本:linux-2.6.24.4 宏: MKDEV(MAJOR, MINOR); 说明: 获取设备在设备表中的位置。 MAJOR主设备号 MINOR次设备号 内核使用的版本号说明文件: 在内核 /Documentation 目录下的 devices.txt 有说明。 一般本地保留的 MAJOR 234-239 ... 阅读全文
摘要:
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... 阅读全文
摘要:
for (i = 0; i bi_bdev); // 找到队列 // 调用队列的"构造请求函数" ret = q->make_request_fn(q, bio); ... 阅读全文
摘要:
应用程序通过标准接口(C Library)调用驱动程序。 C Library 通过 swi 指令进入内核。 字符设备的注册 int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops) a、函数说明: Param1:主设备号 Param... 阅读全文
摘要:
硬件配置 硬件原理 ADC AND TOUCH SCREEN INTERFACE SPECIAL REGISTERS 程序框架 软件架构:输入子系统 优化措施 ①问题:ADC转换出来的值变化太大,不稳定; 原因1:触摸屏被"触摸",触摸点电压值尚未稳定,已经被ADC转换成数字量; 改善1:设置ADC 阅读全文
摘要:
单片机下中断处理过程: ①按键按下 ②CPU发生中断,跳转到异常向量入口 ③跳转到中断处理函数 a、保存被中断的现场 b、执行中断处理函数 c、恢复被中断现场 Linux下中断处理过程: ARM架构CPU的异常向量地址可以是0x00000000,也可以是0xFFFF0000。Linux内核使用的是0xFFFF0000(0xFFFF0000是一个虚拟地址)。因此,在建立虚拟地址映射之后... 阅读全文
摘要:
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... 阅读全文
摘要:
架构 USB的硬件识别原理 基本概念 ①如何区分不同的USB设备? 每个USB设备接入PC时,USB总线驱动程序都会给它分配一个编号(地址); 接在USB总线上的每一个USB设备都有自己的编号(地址); PC机想访问某个USB设备时,发出的命令都含有对应的编号(地址); 新接入的USB设备的设备编号(地址)是0,在未分配新编号之前,PC机使用0编号与其通信; ②USB为... 阅读全文
摘要:
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... 阅读全文