Linux
文章平均质量分 64
Qidi_Huang
技术是一种信仰,我愿做布道者。
展开
-
【转】为什么linux系统变慢了
声明:本文转自 http://www.alivepea.me/linux/why-linux-slow/为什么linux系统变慢了“系统变得很慢了,让我重启一下”,这个被经常使用且有效的做法真的很粗暴。 作为程序员最亲密的伙伴,可以待它温柔多些。在linux发行版中,内核很稳定,极少出现bug,所以通常是某个应用导致系统变慢。 只要查出是哪些应用导致的,kill之就可以了。...转载 2018-07-13 17:54:42 · 1660 阅读 · 0 评论 -
DEVICE_ATTR 详解
【官方文档】 官方描述文档路径为 /linux-4.3/Documentation/driver-model/device.txt 源码路径为 /linux-4.3/include/linux/device.h【DEVICE_ATTR 说明】 原文描述: ˉˉˉˉˉˉˉˉˉˉˉˉˉ Attributes are declared usi原创 2016-04-09 02:17:00 · 6645 阅读 · 0 评论 -
应该在find命令中使用-execdir代替-exec
没事的时候读读 Linux 的 man 文档能学到不少新东西,注意到以前没注意过的细节。 比如刚才在看 find 命令的文档时就发现了下面这 2 段话:-exec command ;Execute command; true if 0 status is returned. All following arguments to find are taken to be arguments to the command until anargument consisting of原创 2016-11-29 08:47:36 · 4214 阅读 · 0 评论 -
音频设备驱动代码单独存放于sound/目录而不在drivers/目录中
今天阅读 drivers/Kconfig 文件时,发现在 "Device Drivers" 这个菜单下的配置项除了音频设备 其它配置项都是在 drivers/ 目录。音频设备的所有代码都位于与 drivers/ 目录平行的 sound/ 目录中。这让音频设备驱动在这堆设备驱动中显得很独特,也提醒我们在添加自己的音频设备驱动时为了保证一致性,不应该将音频驱动代码添加到 drivers/ 目录下。原创 2016-10-31 15:29:08 · 1423 阅读 · 0 评论 -
root权限下执行文件操作失败提示“Read-only file system”解决办法
在 Android 系统中,我们通过 adb 登录到 shell 进行操作时,可能会遇到操作失败并提示 “Read-only file system” 的问题。 注意这里的前提是已经获取到了 root 权限,否则下文的命令不能执行,会被提示 “Permission denied”。 如果你已经是 root 用户了,那么可以重新挂载待操作分区为可读写分区即可消除 “Read-on原创 2016-11-08 18:17:48 · 30472 阅读 · 7 评论 -
"please run 'make mrproper'"编译失败错误解决方法
【前言】 在写正文前首先要批评一下自己。曾经在遇到问题时我的第一反应是自己根据错误信息去查找原因解决问题,但这次在碰到这个问题后,尽管我已经看到了错误信息,但我还是直接去到网上搜索答案。这时我才发现以前那个我不见了,后知后觉,真是惭愧。不经过思考直接去搜索答案的行为很不好,这不是一个技术人应该干的事情。【问题描述】 为 Android 工程编译内核失败,报错信息为:原创 2016-11-04 09:21:26 · 11758 阅读 · 1 评论 -
【转】C/C++中的 mutable、volatile 关键字作用详解
mutable和volatile 很少遇到这两个关键字,学嵌入式估计知道后者,深入研究 C++ 的估计知道前者。 (1)mutable 在 C++ 中,mutable 是为了突破 const 的限制而设置的。被 mutable 修饰的变量,将永远处于可变的状态,即使在一个 const 函数中,甚至结构体变量或者类对象为 const转载 2016-09-19 18:31:10 · 3912 阅读 · 0 评论 -
ASoC Codec驱动代码框架图
【前言】 上个月写了《Audio驱动开发 之 Codec芯片ALC5677驱动代码分析》,但是感觉那个时候理解得还不够深入、写得很粗糙。这一个月以来新看了 HAL层、Framework层的资料,温习了 Plarform_device 驱动、I2C_device 驱动、kobject + ktype + kset 以及更深入地阅读了工程中 Audio 部分的驱动代码,整理出了一原创 2016-09-07 09:40:23 · 2478 阅读 · 0 评论 -
ASoC Machine驱动代码框架图
【前言】 较久之前写了一篇《Linux ASoC音频驱动架构 及 Machine驱动代码分析》,那个时候刚开始接触 ALSA,文章写得很粗糙。这段时间以来新看了 HAL层、Framework层的资料,温习了 Plarform_device 驱动、I2C_device 驱动、kobject + ktype + kset 以及更深入地阅读了工程中 Audio 部分的驱动代码,整理原创 2016-09-07 19:11:52 · 1564 阅读 · 0 评论 -
ASoC Platform驱动代码框架图
【前言】 在更深入地阅读了工程中 Audio 部分的驱动代码之后,整理出了一个 ASoC Platform 驱动代码的框架图。类似的 ASoC Machine驱动代码框架图在《ASoC Machine 驱动代码框架图》中,ASoC Codec驱动代码框架图在《ASoC Codec 驱动代码框架图》中。【图示说明】 浅绿色:模块入口原创 2016-09-09 08:39:43 · 2140 阅读 · 0 评论 -
Linux内核态与用户态
【简述】 内核态(Kernel Mode) 和 用户态(User Mode) 实际上是指 2 种不同的访问权限。 x86处理器包含 4 个不同的特权等级,分别是 Ring0~Ring3。Ring0下,可以执行特权级指令,对任何 I/O 设备都有访问权限,Ring3则被限制很多操作。 在使用 x86处理器的设备上,用户代码运行在 Ring3,系统内核代码运行在 Ring原创 2016-04-15 18:44:17 · 1447 阅读 · 1 评论 -
ASoC驱动开发 之 Codec芯片ALC5677 驱动代码分析
【补充】 关于 ASoC Codec驱动代码框架更详细的介绍可以阅读《ASoC Codec 驱动代码框架图》。(2016年9月2日 添加)【前言】 Linux下的音频驱动多采用 ASoC 架构。在这个架构里,驱动分 Platform、Codec、Machine 这 3 部分,相关介绍可以参见前文《Linux AsoC音频驱动架构 及 Machine驱动代码分析》。本文分析的是 Codec 部分,即音频编解码芯片的驱动代码。这里用作例子的芯片型号为 ALC5677。原创 2016-08-04 18:29:13 · 2756 阅读 · 0 评论 -
Android驱动开发流程 及 系统分层模型
【Android系统分层模型】【驱动开发流程】 1、下载 Android 源码; 2、下载 Linux Kernel 源码,将其放置于 Android 源码根目录的 kernel/ 文件夹下; 3、编写设备驱动源码。按照惯例是在 Linux kernel 源码根目录下的 driver/ 路径新建与设备同名的 xxx 文件夹,并添加驱动源码文原创 2016-08-22 13:59:37 · 2566 阅读 · 0 评论 -
list_entry()等价于container_of()
list_entry() 宏在 linux/list.h 中的定义如下:/** * list_entry - get the struct for this entry * @ptr: the &struct list_head pointer. * @type: the type of the struct this is embedded in. * @m原创 2016-11-02 10:03:31 · 821 阅读 · 0 评论 -
在Linux命令行中以图形化窗口打开文件夹(目录)
在 Windows 系统中,我们可以使用 explorer 命令来以图形化窗口的形式从 CMD 命令行中打开指定的文件夹。这非常方便。 Linux 系统中也有类似的命令。Ubuntu 发行版的命令行中,我们可以使用 nautilus 命令来打开指定目录的图形化窗口界面。类似下面命令这样使用: # nautilus /home/testProjects/ 使原创 2016-12-16 17:21:09 · 18007 阅读 · 0 评论 -
Kernel 4.9 上 dma_alloc_coherent() 函数开辟 DMA 连续内存空间失败 解决办法
【问题描述】 将之前可以在 Kernel 3.14 上正常运行的驱动代码移植到 Kernel 4.9 上,发现驱动在进行 probe 时失败,具体失败位置为函数 dma\_alloc\_coherent(),对应代码段如下:amaudio_start_addr = (unsigned char *)dma_alloc_coherent(amaudio2_dev,原创 2017-09-27 10:50:31 · 8615 阅读 · 2 评论 -
使用 libTomCrypt 实现 AES、HMAC、HKDF 运算
使用 libTomCrypt 实现 AES、HMAC、HKDF 运算Qidi 2017.11.06 (Markdown & Haroopad)1、libTomCrypt 简介 libTomCrypt 是一个使用 C 语言编写的开源加解密算法库,使用 WTF 协议进行授权,支持 AES、HMAC、HKDF、RSA、PRNG、BASE64 等常用加解密算法。2、基础文件 我们在使用 libTomCr原创 2020-07-18 14:36:52 · 1641 阅读 · 0 评论 -
使用 SysRq 查看系统信息
使用 SysRq 查看系统信息Qidi 2017.08.31 (Markdown & Haroopad)前言:因为看到有同事使用了 SysRq 的技巧进行 debug,虽然我目前还没有使用过,但为了便于以后使用也为了备忘,所以在这里简要记录一下。更详细的说明可以阅读文末所列参考文章。1、SysRq 是什么 在某些键盘上我们可以看到 SysRq 键,通过按下这个键和其它字母的组合,我们可以在系统挂起原创 2017-09-12 09:35:18 · 4403 阅读 · 0 评论 -
Linux 内核修改 xxx_defconfig 的正确方法
【前言】 昨天将 Android N 上的驱动代码移植到 Android O 上,xxxx_defconfig 文件是我手动修改的,但因为公司将内核版本切换到 4.9 之后开启了强制代码格式检查,所以 Patch 在提交到服务器之后无法通过格式检测,一直提示存在如下问题:checkpatch found errors or warnings: $ git log -1 | ./scrip原创 2017-09-14 20:01:08 · 8368 阅读 · 1 评论 -
【转】设备树的用法(Device Tree Usage)
【说明】 本文转载自《设备树的用法(Device Tree Usage)》【正文】设备树手册(Device Tree Usage)原文地址:http://www.devicetree.org/Device_Tree_Usage本文概述了如何为一个全新的计算机编写设备树。意在提供一个device tree概念的概述以及如何使用device tree描述一台计算机。有转载 2017-07-27 11:25:37 · 1629 阅读 · 0 评论 -
把“dereference”翻译成“提领”不如直译为“引用解析”
【正文】 这 2 天在回顾《内核设计与实现(第3版)》这本书时又看到了“提领”这种说法,它出现在书上第 75 页。估计译者当时也不知道应该翻译成什么中文词汇比较好,所以在译文后加上了英文原文“dereference”。书上的原文是这样的: 节约两次提领(dereference) 如果你碰巧已经得到了 next 和 prev 指针,你可以直接调用内部链表函数,从而省下一点时间(其实原创 2017-06-13 11:48:51 · 2929 阅读 · 10 评论 -
【I2C设备驱动】必须将id_table[]数组的最后一个元素设置为空的原因
忘记了在哪本书上看到过,说必须给 I2C 设备驱动的 id 表数组添加上一个空元素作为最后一个元素,就像下面的代码所展示的那样:struct i2c_device_id { char name[I2C_NAME_SIZE]; kernel_ulong_t driver_data; /* Data private to the driver */}static const str原创 2017-06-26 15:28:20 · 2937 阅读 · 0 评论 -
Android系统中耳机按键键值上报不正确 解决过程
【问题现象】 根据测试组同事反馈:在我们的设备上使用 JBL 品牌某款带有 3 个按键的有线耳机时,按下“音量+”键时设备会减小音量而不是增加音量,按下“音量-”键时设备无响应;在设备上使用 Samsung 品牌某款带有 3 个按键的有线耳机时,按下“音量-”键时设备会启动语音助手而不是减小音量。但按下 2 款耳机的中间键(播放/暂停键)均可以得到正确的响应。【分析问题】原创 2017-05-27 16:48:21 · 5465 阅读 · 1 评论 -
Android系统中固件崩溃后使用uevent机制重新加载固件 流程分析
【前言】 Android系统为了保证各商业公司的利益,允许在系统中使用不开源的固件。因此我们可以看到比如用于音频处理的、用于键盘支持的等等大量固件。既然这么多模块要用到固件,那么我们也有必要来了解一下固件在崩溃后的自恢复过程。这篇博文是基于 Intel x86 平台写的,所分析的固件是 Intel 平台的一款音频 DSP 固件,使用 uevent 机制来收发固件恢复消息。所以如果读者使用原创 2017-03-29 08:50:33 · 1595 阅读 · 0 评论 -
Android Makefile常用函数简介(不定期更新)
word N, TEXT 作用:取出TEXT中第N个单词 示例:$(word 3, aaa bbb ccc) 结果为 ccc 出处:main.mk:26:#TOP := (dir(dir (word (words(words (MAKEFILE_LIST)),$(MAKEFILE_LIST)))原创 2017-03-02 08:16:41 · 2148 阅读 · 0 评论 -
Android系统中从发生耳机插拔事件到音频Route切换过程分析
【概要】 我们知道,耳机插入/拔出事件肯定是通过中断通知系统进行处理的。有了这个认识之后,我们就可以对这个过程进行逐个击破的分析了: 1、 谁为耳机事件产生中断? 2、 中断处理函数是哪个? 3、 中断处理函数中执行了什么操作来改变音频Route? 【备注】 本文基于我所使用的硬件环境进行分析,虽然可能与你现在使用的芯片不同,原创 2017-02-08 11:45:42 · 3199 阅读 · 2 评论 -
音频出现Xrun(underrun或overrun)的原因与解决办法
【现象】 音频文件在播放时出现断断续续或类似“爆破”(Pop-Click)杂音的现象,称之为 Xrun(可以是 underrun,也可以是 overrun)。【原因】 通常来说,出现 Xrun 问题时原因可能是以下几个之一: (1) Linux CFS 调度器导致。因为 CFS 调度器的“公平调度”是较长一段时间的平均表现,在很短的一个窗口时间段内,CFS 也可能会将 CPU 时间片完全分配给一个 nice 值更高的线程而不顾及另一个 nice 值更低的线程。如果这个低 nice原创 2016-11-09 16:14:44 · 19127 阅读 · 2 评论 -
Audio驱动开发 之 音频链路学习笔记
【元器件说明】 本文中使用的 Codec 芯片为 ALC5677。【音频链路模型】 一个常见的音频链路如 图1 所示,包含 音频输入、ADC、DSP、DAC、音频输出 5 大部分。图1 音频链路模型 【音频输入部分】 在 图1 中,DSP 的音频数据来源,也即音频输入部分只有麦克风。而实际上,这部分音频数据也可以从文原创 2016-07-26 08:34:16 · 3756 阅读 · 0 评论 -
ASoC 概述(中文翻译) / ASoC Overview
【版权声明】 本文为 ASoC 框架的概述性文档,翻译自 Linux 内核源码文档中的 Documentation/sound/alsa/soc/overview.txt,遵循 GPL 协议。 文中如有翻译不当的地方,请不吝指正。【译文正文】ASoC层======ASoC层的目标是为嵌入式片上系统处理器(比如 pxa2xx,au1x00,iMX 等)和移翻译 2016-08-08 19:58:12 · 1736 阅读 · 0 评论 -
2.4G WLAN芯片 AR9341 学习笔记
【芯片概述】 AR9341是一款用于 2.4GHz 网络的 WLAN 平台芯片,CPU核为 MIPS 74Kc。芯片内置 MAC/PHY 模块,支持 20MHz/144Mbps 传输模式和 40MHz/300Mbps 传输模式,支持从 NOR flash 上启动。除此之外,AR9341还有很多其它内置模块,其系统框图如下:图1 AR9341系统框图 【Datashe原创 2016-05-14 17:53:19 · 8333 阅读 · 0 评论 -
PHY芯片 AR8033 学习笔记
【芯片简介】 AR8033是Atheros公司的第4代10/100/1000Mbps速率以太网PHY芯片,可用于家庭网关、企业交换机、移动基站、光模块等设备。该芯片采用RGMII协议或SGMII协议与MAC芯片进行通信,只需要单一3.3V电源供电,可自行整流变换出片内电路所需其它电源。AR8033还内置了一个工作频率为1.25GHz的SerDes接口,可以直接与光纤收发模块连接,将光信号原创 2016-05-12 22:23:24 · 23601 阅读 · 7 评论 -
AR7240芯片 EthernetSwitch模块 学习笔记
【模块概述】 EthernetSwitch 模块中包含 5个 10/100Mbps高速以太网接口和 5个 10/100双模式以太网收发器(PHY)。模块可通过配置使用 VLAN 功能,支持 16个802.1Q VLAN和 基于端口的VLAN划分,VLAN ID的可分配范围为0~4095。 【寄存器概述】 内置交换芯片模块的寄存器分 3大类:全局控制寄存器原创 2016-05-26 17:03:52 · 7313 阅读 · 0 评论 -
PHY芯片 AR8033驱动代码分析
【思路描述】 想要在Linux上使用AR8033需要做2部分工作,一是编写设备驱动并将设备驱动注册到内核,二是创建设备通信要使用的mdio总线并将设备注册到总线上。【代码分析】a) 驱动注册流程: 文件mdio_gpio.c 是 mdio_gpio 模块的代码所在。在模块加载函数 mdio_gpio_init() 中通过语句 ret = p原创 2016-05-13 21:36:41 · 10380 阅读 · 0 评论 -
C语言 命令行传参进行 异或 加密/解密
【说明】 对指定文件中的内容或传入的文本参数进行异或加密/解密,并将加密/解密后的结果保存到文档。可以指定进行异或加密/解密时要使用的私钥。【命令行示例】 [root@localhost]$ ./magicTransfer xCode 64x 这条命令的含义是如果当前目录下存在 64.txt 这个文本,则对该文本进行解密并将解密结果保存到 64x.原创 2016-05-16 08:03:29 · 1721 阅读 · 0 评论 -
C语言 逆序显示文本内容并保存
【说明】 对指定文件中的内容或传入的字符串参数逆序打印并保存到文件中。【命令行示例】 [root@localhost]$ ./reverseStr test.txt 这条命令的含义是读取 ./test.txt 文件中的内容,将文件内容顺序反向存储到 outPut.txt 文件中。 [root@localhost]$ ./rever原创 2016-05-16 08:13:01 · 2488 阅读 · 0 评论 -
创建Linux内核函数的Man手册
【前言】 编写驱动程序的时候,一般情况下使用的都不是 C标准库的函数,而是 Linux内核中的函数。所以即使用 man命令 也找不到很多函数的帮助信息,这很不利于 Linux内核的学习。 好在 Linux内核虽然没有直接提供手册,却提供了创建手册的工具。我们可以手动生成 Linux内核的 Man手册。【创建步骤】 1、下载一个稳定版本的内核,例如:linux-原创 2016-04-28 21:58:10 · 3916 阅读 · 1 评论 -
Linux内核模块编程学习总结
【内核模块的出现】 编译内核时,用户可以把所有的代码编译进内核,但是这样会引起两个问题: 一是内核过大; 二是当需要添加或者删除内核时,需要重新再编译内核。 所以有了 内核模块 的概念。 模块并不编译到内核中,编译后存放在指定的目录,当需要使用时动态加载。【内核模块的优点】 在嵌入式设备驱动开发中将驱动程序以模块的形式发布,极原创 2016-04-15 18:37:08 · 1570 阅读 · 0 评论 -
gcc编译提示pthread_create和pthread_detach未定义的引用的解决方法
因为 pthread_create 和 pthread_detach 函数不是 Linux 的内建函数,所以在对使用了多线程技术的工程进行编译链接生产可执行文件时,需要在链接过程添加 -pthread 参数。根据 Linux 中man出的帮助信息也可以看到相应的提示“Compile and link with -pthread”。所以makefile应该这么写:testPthr原创 2015-12-24 00:46:23 · 4824 阅读 · 0 评论 -
生成在嵌入式设备上运行的程序需要进行交叉编译
需要进行交叉编译才能生成可以在嵌入式设备上运行的程序。拿我今天的经历来说,使用 gcc 编译链接生成的程序可以在 ubuntu PC上正常运行,但是 tftp 上传到设备上之后,运行却总提示 syntax error: unexpected '('。后来董工恰巧看见了提醒我说应该使用交叉编译生成可执行文件,于是使用 arm-hisiv300-linux-gcc 重新编译链接,tftp 到设原创 2015-12-25 21:44:28 · 1509 阅读 · 0 评论 -
修改Linux配置使其默认启动到命令行模式(控制台)
上班之后开始频繁使用Linux,平常都是使用命令行进行工作,偶尔才会切换到 GUI 环境下玩玩,同时也为了多熟悉熟悉 Linux 命令,于是想把开机默认界面设置为命令行模式,也就是控制台,有需要的时候再手动启动 GUI 桌面。我使用的系统是 ubuntu 13.04,配置参数写在 /etc/default/grub 文件里,将 GRUB_CMDLINE_LINUX_DEFAULT 的值由“quie原创 2015-12-25 21:53:45 · 4085 阅读 · 0 评论