自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (3)
  • 收藏
  • 关注

转载 File_operations结构体

file_operation通俗解释

2022-08-25 16:09:18 2890

原创 epoll 与select poll区别

(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态, 但是它没有最大连接数的限制,原因是它是基于链表来存储的.

2021-04-26 21:53:03 398

原创 json入门

JSON 语法是 JavaScript 对象表示语法的子集。数据在名称/值对中数据由逗号分隔大括号 {} 保存对象中括号 [] 保存数组,数组可以包含多个对象JSON 值可以是:数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 false)数组(在中括号中)对象(在大括号中)nullJSON 数字可以是整型或者浮点型"value" : 25 JSON 对象在大括号 {} 中书写:JSON对象在大括号{}中书写,对象可以包含单个或者多个JSON数据。对象(

2020-11-01 18:16:05 389

原创 杂项设备(misc device)

杂项设备(misc device)杂项设备也是嵌入式系统中用得比较多的一种设备驱动。在 Linux 内核的include/linux目录下有miscdevice.h文件,要把自己定义的misc device从设备定义在这里。其实是因为这些字符设备不符合预先确定的字符设备范畴,所有这些设备采用主编号10 ,一起归于misc device,其实misc_register就是用主标号10调用register_chrdev()的,只不过misc是将一些字符设备存放在misc类中。换句话说,misc设备其实也就是特

2020-10-17 20:03:29 1537

原创 platform平台驱动模型 总线-驱动-设备

platform 总线(1)相对于usb、pci、i2c等物理总线来说,Linux 提出了 platform 这个虚拟总线,相应的就有 platform_driver 和 platform_device。platform总线是虚拟的、抽象出来的。(2)CPU与外部通信的2种方式:地址总线式连接和专用接口式连接。平台总线对应地址总线式连接设备,也就是SoC内部集成的各种内部外设。Linux系统内核使用bus_type结构体表示总线,此结构体定义在文件include/linux/device.h,bus_

2020-10-17 19:01:08 406

转载 推挽、开漏、强上拉、弱上拉、强下拉、弱下拉输出

上拉(Pull Up )或下拉(Pull Down)电阻(两者统称为“拉电阻”)最基本的作用是:将状态不确定的信号线通过一个电阻将其箝位至高电平(上拉)或低电平(下拉),无论它的具体用法如何,这个基本的作用都是相同的,只是在不同应用场合中会对电阻的阻值要求有所不同,从而也引出了诸多新的概念,本节我们就来小谈一下这些内容。如果拉电阻用于输入信号引脚,通常的作用是将信号线强制箝位至某个电平,以防止信号线因悬空而出现不确定的状态,继而导致系统出现不期望的状态,如下图所示:在实际应用中,10K欧姆的电阻是使用数

2020-10-16 17:05:08 7511

原创 自旋锁和互斥锁

A hybrid mutex behaves like a spinlock at first on a multi-core system. If a thread cannot lock the mutex, it won’t be put to sleep immediately, since the mutex might get unlocked pretty soon, so instead the mutex will first behave exactly like a spinlock.

2020-10-07 21:09:23 136

原创 等待队列代码实现

hpet_read(struct file *file, char __user *buf, size_t count, loff_t * ppos){ DECLARE_WAITQUEUE(wait, current); /* 定义一个等待队列 */ unsigned long data; ssize_t retval; struct hpet_dev *devp; devp = file->private_data; /* 私有化数据 */ if (!devp->

2020-10-07 20:35:10 215

原创 Linux 阻塞和非阻塞 IO

IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞 IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络IO获取新浪的网页。浏览器首先会发送数据给新浪服务器,告诉它我想要首页的HTML,这个动作是往外发数据,叫Outpu

2020-10-04 21:00:50 124

原创 linux驱动开发之地址映射(mmu)

在编写驱动之前,我们需要先简单了解一下 MMU 这个神器, MMU 全称叫做 Memory Manage Unit,也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU,但是现在Linux 内核已经支持无 MMU 的处理器了。 MMU 主要完成的功能如下:①、完成虚拟空间到物理空间的映射。②、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性。我们重点来看一下第①点...

2020-01-11 14:20:44 1326

原创 Linux 设备号

设备号的组成为了方便管理, Linux 中每个设备都有一个设备号,设备号由主设备号和次设备号两部分组成,主设备号表示某一个具体的驱动,次设备号表示使用这个驱动的各个设备。 Linux 提供了一个名为 dev_t 的数据类型表示设备号, dev_t 定义在文件 include/linux/types.h 里面12 typedef __u32 __kernel_dev_t;......15 t...

2020-01-09 17:24:54 489

原创 printk的用法及优先级

这里使用了 printk 来输出信息,而不是 printf!因为在 Linux 内核中没有 printf 这个函数。 printk 相当于 printf 的孪生兄妹, printf运行在用户态, printk 运行在内核态。在内核中想要向控制台输出或显示一些内容,必须使用printk 这个函数。不同之处在于, printk 可以根据日志级别对消息进行分类,一共有 8 个消息级别,这 8 个消息级别...

2020-01-09 17:11:11 1588

原创 linux驱动模块的加载和卸载

Linux 驱动有两种运行方式,第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),在Linux 内核启动以后使用“insmod”命令加载驱动模块。在调试驱动的时候一般都选择将其编译为模块,这样我们修改驱动以后只需要编译一下驱动代码即可,不需要编译整个 Linux 代码。而且在调试的时候...

2020-01-09 12:04:03 4425 1

原创 字符设备驱动开发总概

字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、 IIC、 SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/dev/xxx” (xxx 是具体的驱动...

2020-01-09 11:37:37 361

原创 Linux驱动分类简介

Linux驱动主要具有如下几点作用:系统调用是应用程序和内核之间的接口,驱动程序是内核和硬件之间的接口;驱动程序接受上层软件(应用程序、内核)的请求,完成对硬件的操作,屏蔽了硬件的细节;驱动程序将硬件设备抽象成一个文件,应用程序操作文件即操作硬件,符合Linux“一切皆文件”的思想。驱动的分类及特点计算机硬件系统有CPU、存储器以及外设组成,Linux驱动针对的对象是存储器和外设;...

2020-01-09 11:19:17 1547

原创 linux驱动面试题

1、字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件?答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件。评:这只是其中一种方式,也叫手动创建设备文件。还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后。那么在系统启动...

2020-01-09 11:16:42 4993

原创 模电学习笔记八 第6-9章 习题

2019-12-28 21:19:46 213

原创 模电学习笔记七 第9章

2019-12-28 21:15:17 204

原创 模电学习笔记六 第7章

2019-12-28 21:14:02 188

原创 模电学习笔记五 第6章

2019-12-28 21:11:31 197

原创 模电学习笔记四 第5章

2019-12-28 21:08:20 237

原创 模电学习笔记三 4章

2019-12-28 21:05:24 188

原创 模电学习笔记二 2-3章

更正习题

2019-12-28 20:58:02 203

原创 模电学习笔记一 —— 二极管

习题

2019-12-28 20:27:50 520

原创 LCD 时间参数与crt显示器联系

如果将 LCD 显示一帧图像的过程想象成绘画,那么在显示的过程中就是用一根“笔”在不同的像素点画上不同的颜色。这根笔按照从左至右、从上到下的顺序扫描每个像素点,并且在像素画上对应的颜色,当画到最后一个像素点的时候一幅图像就绘制好了。假如一个 LCD 的分辨率为 1024600LCD 是怎么扫描显示一帧图像的。一帧图像也是由一行一行组成的。 HSYNC 是水平同步信号,也叫做行同步信号,当产生此...

2019-12-21 21:11:22 396

原创 ubuntu的子目录用途

但是这些都是 Ubuntu 所需要的,其中有很多子目录和文件我们嵌入式 Linux 是用不到的,所以这里就看一些常用的子目录:1、 /bin 目录看到“bin”大家应该能想到 bin 文件, bin 文件就是可执行文件。所以此目录下存放着系统需要的可执行文件,一般都是一些命令,比如 ls、 mv 等命令。此目录下的命令所有的客户都可以使用。2、 /dev 目录dev 是 device 的...

2019-12-12 20:14:33 257

原创 ubuntu16.04突然无法联网问题解决方法之一

今天,使用ubuntu下载东西时,突然提醒网络连接失败,问题如下:输入:ifconfig输出:ens33 Link encap:以太网 硬件地址 00:11AA:fE:22:FbUP BROADCAST MULTICAST MTU:1500 跃点数:1接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0发送数据包:0 错误:0 丢弃:0 过载:0 载波:0碰撞:0 发送队列长度:...

2019-12-12 17:17:39 1371

原创 Linux 内核启动流程

链接脚本 vmlinux.lds要分析 Linux 启动流程,同样需要先编译一下 Linux 源码,因为有很多文件是需要编译才会生成的。首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds,通过链接脚本可以找到 Linux 内核的第一行程序是从哪里执行的。 vmlinux.lds 中有如下代码: vmlinux.lds 链接脚本492 OUTPUT...

2019-12-07 17:30:57 641 1

原创 linux源码剖析五 make zImage 过程

vmlinux、 Image, zImage、 uImage 的区别前面几小节重点是讲 vmlinux 是如何编译出来的, vmlinux 是 ELF 格式的文件,但是在实际中我们不会使用 vmlinux,而是使用 zImage 或 uImage 这样的 Linux 内核镜像文件。那么vmlinux、 zImage、 uImage 他们之间有什么区别呢?①、 vmlinux 是编译出来的最原始...

2019-12-06 21:19:28 974

原创 linux源码剖析四 built-in.o 文件编译生成过程

vmliux 依赖 vmlinux-deps,而 vmlinux-deps=$(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN), KBUILD_LDS是连接脚本,这里不考虑,剩下的 KBUILD_VMLINUX_INIT 和 KBUILD_VMLINUX_MAIN 就是各个子目录下的 built-in.o、 .a 等文件。最终 v...

2019-12-06 21:09:57 2676

原创 linux 顶层makefile源码剖析三 make 过程

125 PHONY := _all126 _all:......192 PHONY += all193 ifeq ($(KBUILD_EXTMOD),)194 _all: all195 else196 _all: modules197 endif......608 all: vmlinux第 126 行, _all 是默认目标,如果使用命令“make”编译 Linux 的话...

2019-12-06 20:04:39 347

原创 linux make xxx_defconfig 过程 Makefile.build 脚本分析

config-targets := 0mixed-targets := 0dot-config := 1ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) dot-config ...

2019-12-05 20:54:06 647

原创 linux 顶层 Makefile 详解

Linux 的顶层 Makefile 和 uboot 的顶层 Makefile 非常相似,因为 uboot 参考了 Linux,前 602行几乎一样,所以前面部分我们大致看一下就行了。1、版本号顶层 Makefile 一开始就是 Linux 内核的版本号2、 MAKEFLAGS 变量MAKEFLAGS 变量设置如下所示:。3、命令输出Linux 编译的时候也可以通过“V=1”来输出...

2019-12-05 20:17:26 1058

原创 linux编译后文件夹

arch 架构相关目录。Linux 自带block 块设备相关目录。crypto 加密相关目录。Documentation 文档相关目录。drivers 驱动相关目录。firmeare 固件相关目录。fs 文件系统相关目录。include 头文件相关目录。init 初始化相关目录。ipc 进程间通信相关目录。kernel 内核相关目录。lib 库相关目录。mm 内存管理相...

2019-12-05 19:41:31 1193

原创 linux源码 编译脚本

#!/bin/shmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distcleanmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfigmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfigmake ...

2019-12-05 19:08:55 346

原创 I.MX6U MMDC 控制器简介

MMDC 控制器STM32 的 FMC 或 FSMC 外设用于连接 SRAM 或 SDRAM,对于 I.MX6U 来说也有 DDR 内存控制器,否则的话它怎么连接 DDR 呢? MMDC 就是 I.MX6U的内存控制器, MMDC 是一个多模的 DDR 控制器,可以连接 16 位宽的 DDR3/DDR3L、 16 位宽的 LPDDR2, MMDC 是一个可配置、高性能的 DDR 控制器。 MM...

2019-11-27 19:23:33 1932

原创 DDR3 关键时间参数

1、传输速率比如 1066MT/S、 1600MT/S、 1866MT/S 等,这个是首要考虑的,因为这个决定了 DDR3 内存的最高传输速率。2、 tRCD 参数tRCD 全称是 RAS-to-CAS Delay,也就是行寻址到列寻址之间的延迟。 DDR 的寻址流程是先指定 BANK 地址,然后在指定行地址,最后指定列地址确定最终要寻址的单元。 BANK 地址和行地址是同时发出的,这个命令...

2019-11-27 18:36:19 11894

原创 SRAM SDRAM DDR 简介

SRAM为什么要讲 SRAM 呢?因为大多数的朋友最先接触 RAM 芯片都是从 SRAM 开始的,因为大量的 STM32 单片机开发板都使用到了 SRAM,比如 F103、 F407 等,基本都会外扩一个512KB 或 1MB 的 SRAM 的,因为 STM32F103/F407 内部 RAM 比较小,在一些比较耗费内存的应用中会出现内存捉紧的情况,比如 emWin 做 UI 界面。我们简单回顾...

2019-11-27 18:28:21 7568

原创 I.MX6U芯片的UART

I.MX6U 一共有 8 个 UART,其主要特性如下:1、兼容 TIA/EIA-232F 标准,速度最高可到 5Mbit/S。2、支持串行 IR 接口,兼容 IrDA,最高可到 115.2Kbit/s。3、支持 9 位或者多节点模式(RS-485)。4、 1 或 2 位停止位。5、可编程的奇偶校验(奇校验和偶校验)。6、自动波特率检测(最高支持 115.2Kbit/S)。UART ...

2019-11-26 23:09:41 757 1

原创 imx6ull gpt高精度定时器

GPT 定时器是一个 32 位向上定时器(也就是从 0X00000000 开始向上递增计数), GPT 定时器也可以跟一个值进行比较,当计数器值和这个值相等的话就发生比较事件,产生比较中断。GPT 定时器有一个 12 位的分频器,可以对 GPT 定时器的时钟源进行分频, GPT 定时器特性如下:①、一个可选时钟源的 32 位向上计数器。②、两个输入捕获通道,可以设置触发方式。③、三个输出比...

2019-11-26 23:09:18 1186

I.MX6UL_DDR3_Script_Aid_V0.02.xlsx

I.MX6UL_DDR3_Script_Aid_V0.02.xlsx就是NXP为I.MX6UL编写的DDR3配置excel表, 虽然看名字是为 I.MX6UL 编写的,但是 I.MX6ULL 也是可以使用的。 打开 I.MX6UL_DDR3_Script_Aid_V0.02.xlsx

2019-11-27

ddr_stress_tester_v2.90.exe

nxp的ddr_stress_tester_v2.90 i.MX6X DDR3 调校说明应用手册 by John Li(R64710) GSM FAE 飞思卡尔半导体. 上海, 此应用手册主要说明如何调校 i.MX6X (包括 i.MX6Q/D/DL/S)的 DDR3. Date Comment V1 2013-09 • 创建文档 • 使用 DDR 压力测试工具,先 前只测试 i.MX6Q SDP 板 V2 2014-09-19 • 根据测试工具最新版本 v1.0.3 更新文档 • 增加了新章节:应用 DDR3 校准参数到 Uboot; DRAM 接 口高阶应用指导-DDR3 篇 V3 2015-03-26 • 3.3 节确认了不论是否 T-拓扑 都需要做 write leveling 校准 • 修改了第 4 章,所有初始化脚 本中的参数都需要在 uboot 中设置 V4 2015-07-30 • 插入第 4 章,支持各种 DDR3 配置,原有之后章节顺延 Contents 1 硬件资源,文档及工具下载 ....................................... 2

2019-11-27

基于nxp官方移植的core_ca7.h 适用于imx6ull

基于nxp官方移植的core_ca7.h 适用于imx6ull

2019-11-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除