Linux内核与驱动
文章平均质量分 85
cnhui2016
这个作者很懒,什么都没留下…
展开
-
Linux内核模块
一、什么是模块1、定义可加载内核模块Loadable Kernel Module,LKM 2、为什么需要模块LINUX内核是单内核,即内核模块是内核的一部分,和内核其他代码是一个程序。那么问题就来了:PC这样的通用平台会遇到什么问题? 3、模块融入内核的时机A、静态编译进内核内核模块代码跟内核其他代码一起编译。 B、运行时动态加载内核先编译,然后再单...原创 2017-05-21 17:18:54 · 640 阅读 · 0 评论 -
Linux kernel panic 问题解决方案
=====================================================arm linux系统启动相关文章列表:arm linux系统启动流程 http://blog.csdn.net/u010872301/article/details/72615117分析arm linux启动打印信息 http://blog.csdn.net/u010872301/ar...原创 2017-06-29 23:32:52 · 29439 阅读 · 1 评论 -
arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析
C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题。如果crash的地方正是内存使用错误的地方,说明你人品好。如果crash的地方内存明显不是consistent的,或者内存管理信息都已被破坏,编译器不能发现这些问题,.运行时才能捕获到这些错误并且还是随机出现的,那就比较麻烦了。当然,祼看code打log是一个办法,但其效率不是太高,尤其是在运行成本高或重现概率原创 2017-06-23 16:18:46 · 7891 阅读 · 0 评论 -
Exynos4412 BSP平台搭建(详细图解)
本文首先需要的开发工具:一、配置交叉工具链:arm-none-linux-gnueabi.tar.bz2二、Bootloader编译:uboot-fs4412_v2.tar.xz三、Linux内核编译:linux-3.0-fs4412_v3.tar.xz四、通过网络加载内核和文件系统:rootfs.tar.gz~欢迎下载~Samsung Cortex-A9 Exynos4412开发板平...原创 2017-02-26 17:16:30 · 1785 阅读 · 0 评论 -
一步一步重构柔性数组和智能指针
在C/C++实际工程开发中内存操作,稍不留神就会出现千奇百怪的各种bug,导致整个项目组花很大的时间使用各种工具定位错误,解决内存操作问题!对于用户使用Android手机,用了你开发的APP,非常郁闷怎么就越来越慢的困惑,在本章中我不会讲用valgrind工具还是火焰图等其他工具来定位你的问题的位置。我会重点用C/C++说明以下几点如何预防?1、防止数组越界操作,使用柔性数组;2、内存...原创 2018-05-23 14:34:22 · 502 阅读 · 0 评论 -
DMA数据传输
SD主控制器与系统存储空间进行数据传输时使用SDMA或ADMA2传输方式,需要配置的参数包括:一次传输的数据块数、每块数据大小、传输边界、传输方向、传输数据首地址、DMA传输模式等信息(1)单DMA传输(SDMA) 单DMA传输的流程图如下图所示,在这种模式下,数据搬运通过SDMA完成,无需处理器参与,释放了CPU资源。在SDMA模式下,System Address存储的是数据传输的实际...原创 2018-05-24 15:51:06 · 7042 阅读 · 1 评论 -
linux设备模型之mmc子系统
翻开mmc子系统驱动代码在Linux源码中的位置linux-3.4.y/drivers/mmc,分别有card、core和host三个文件夹, card、core和host这三层的关系,如下图:从这幅图中的关系:1、 card层针对不同客户端的设备驱动程序,如SD卡、SDIO接口的串口设备驱动,card目录下的block.c、queue.c向它提供几个函数操作队列,调用core目录下的co...原创 2018-05-24 16:06:39 · 1567 阅读 · 1 评论 -
Linux驱动之分层框架
在Linux内核中你很难看到驱动+应用的程序设计方法,而是使用的是Linux分层框架分层分工,标准化接口+标准化功能代码:interface - 接口层,标准化接口device - 设备层,实现功能函数include - 接口层及设备层共用的头文件目录modules - 编译输出的模块目录test - 应用程序接口层在模块初始化函数中就注册了一个字符设备,操作方法集file_operations是...原创 2018-06-08 19:08:08 · 1818 阅读 · 1 评论 -
ZYNQ ZCU102视频编码开发
ZCU102实时YUV码流输出方案:将摄像头采集的数据,输出YUV的码流数据!功能:将实时YUV码流在ZCU102BSP上编码H265,通过RTP传输协议将H265视频数据打包发送到客服端,客服端上设置H265相关参数(IP、端口号、时钟频率等)在sdp文件中,使用VLC播放实时的H265码流。搭建linux开发环境步骤:(1)通过Vivado编译h265工程,生成system...原创 2018-08-02 18:03:28 · 6214 阅读 · 5 评论 -
解决Android 音频Xrun问题
音频文件在播放时出现声音断断续续,一卡一卡的或类似“爆破”(Pop-Click)杂音的现象,称之为 Xrun(可以是 underrun,也可以是 overrun)。分析:alsa driver使用了环形缓冲区对dma buffer进行管理,如下图。播放时,应用程序把音频数据源源不断地写入dma buffer中,然后相应platform的dma操作则不停地从该buffer中取出数据,经d...原创 2018-11-23 16:35:06 · 3677 阅读 · 2 评论 -
RK3288的GTxx触摸屏驱动调试
电容屏是在LCD屏上覆盖一个透明的矩阵键盘,在调试goodix gt9xx系列触控屏的驱动时,会遇到各种问题!1、linux启动时,触控屏驱动偶尔不能加载固件信息。2、在使用过程中偶尔不能触发或触发失灵现象。3、触屏反应缓慢,灵敏度很差。4、当用户按下时,获取按下的坐标位置不对应![RK3288][Android5.1][GT9271]打印dmesg的log信息:<4>...原创 2018-11-29 19:16:09 · 5764 阅读 · 2 评论 -
基于RK3399 PWM驱动开发
1. 主板型号:AIO-3399J2. 芯片型号:RK33993. 操作系统版本:Android 7.14. Linux版本:v4.4.103 PWM(Pulse Width Modulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值),驱动的设备是雷达扫描电机RPLIDARA3M1内部带有具有可调速功能的电机...原创 2019-06-12 18:20:48 · 3941 阅读 · 3 评论 -
分析arm linux启动打印信息
{//-------------------------------启动信息---------------------------------- {//-------u-boot环境变量设置 FS4412 # pri baudrate=115200 bootargs=root=/dev/nfs nfsroot=192.168.9.120:/nfs/rootfs rw console原创 2017-12-12 17:17:00 · 2503 阅读 · 0 评论 -
arm linux系统启动流程
-Boot工作过程U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:(1)第一阶段的功能硬件设备初始化加载U-Boot第二阶段代码到RAM空间设置好栈跳转到第二阶段代码入口(2)第二阶段的功能初始化本阶段使用的硬件设备检测系统内存映射将内核从Flash读取到RAM中为内核设置启动参数调用内核原创 2017-05-21 22:09:39 · 2581 阅读 · 1 评论 -
rootfs文件系统的制作(二)
根文件系统(root filesystem)是存放运行、维护系统所必须的各种工具软件、库文件、脚本、配置文件和其他特殊文件的地方,也可以安装各种软件包。根文件系统主要目录结构创建根文件系统步骤1、采用Busybox创建基本命令2、创建基本的目录 /lib /etc /var /tmp /dev /sys /proc等3、添加glibc基本动态库4、原创 2017-06-12 22:01:09 · 1496 阅读 · 0 评论 -
rootfs文件系统的制作(一)
根文件系统(root filesystem)是存放运行、维护系统所必须的各种工具软件、库文件、脚本、配置文件和其他特殊文件的地方,也可以安装各种软件包。一般根文件系统主要目录结构:创建根文件系统步骤1、采用Busybox创建基本命令2、创建基本的目录 /lib /etc /var /tmp /dev /sys /proc等3、添加glibc基本动态库原创 2017-06-19 16:32:30 · 699 阅读 · 0 评论 -
Linux 设备树的使用技巧
Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。引入了设备树之后,驱动代码只负责处理驱动的逻辑,而关于设备的具体信息存放到设备树文件中,这样,如果只是硬件接口信息的变化而没有驱动逻辑的变化,驱动开发者只需要修改设备树文件信息,不需要改写驱动代码。比如在ARM Linux内,一个...原创 2017-05-21 16:32:55 · 2137 阅读 · 0 评论 -
linux设备驱动之PCIE驱动开发
PCIE(PCI Express)是INTEL提出的新一代的总线接口,目前普及的PCIE 3.0的传输速率为8GT/s,下一代PCIE 4.0将翻番为16GT/S,因为传输速率快广泛应用于数据中心、云计算、人工智能、机器学习、视觉计算、显卡、存储和网络等领域。PCIE插槽是可以向下兼容的,比如PCIE 1X接口可以插4X、8X、16X的插槽上。实现基本的PCIE驱动程序,实现以下模原创 2017-11-13 13:47:00 · 34266 阅读 · 14 评论 -
图解Linux字符设备驱动
1、字符设备读写过程 2、字符设备打开过程 3、设备节点创建过程 4、字符设备驱动注册过程5、字符设备驱动程序中重要的三个数据结构file_operations、inode、file关系:...原创 2017-05-21 17:41:32 · 790 阅读 · 0 评论 -
从ARM裸机看驱动之按键中断方式控制LED(一)
软件环境:Eclipse硬件环境:JTAG ARM 仿真器同志们,我需要大家跟我的思路一起思考:1、程序是从主函数main开始执行的吗?2、按下按键是怎么到达cpu核的?3、异常向量表是什么鬼?我将在从ARM裸机看linux驱动中一一道来!芯片上电后,ARM处于SVC模式,首先要执行start.s文件,对芯片进行初始化,跳转到原创 2017-11-12 11:05:48 · 2424 阅读 · 0 评论 -
Linux字符设备驱动中container_of宏的作用
Linux字符设备驱动中container_of宏的作用首先看看这个宏的原型:container_of(ptr,type,member) 功能:根据一个结构体变量中的一个成员变量的指针来获取指向整个结构体变量的指针。参数: ptr:已知的结构体成员的首地址(指针); type:要获取的结构体变量的类型 me原创 2016-07-02 20:37:01 · 786 阅读 · 0 评论 -
从ARM裸机看驱动之按键中断方式控制LED(二)
硬件环境:Samsung Cortex-A9 Exynos4412 BSP软件环境:Linux3.14=====================================================从ARM裸机看驱动相关文章列表:从ARM裸机看驱动之按键中断方式控制LED(一) http://blog.csdn.net/u010872301/article/detail...原创 2017-11-13 23:29:58 · 1214 阅读 · 0 评论 -
Android 串口开发
1. 主板型号:AIO-3399J2. 芯片型号:RK33993. 操作系统版本:Android 7.14. Linux版本:v4.4.103RPLIDAR A3M1 激光雷达通讯接口采用 3.3V 电平的串口。UART ttyS配置文件适配的波特率:256000bps。本文根据驱动来修改非标准波特率,然后通过APP读写雷达设备串口数据,修改串口读写、串口安全权限的问题。5. ...原创 2019-07-05 15:40:18 · 4330 阅读 · 2 评论