自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (4)
  • 收藏
  • 关注

转载 宋宝华: Linux为什么一定要copy_from_user ?

网上很多人提问为什么一定要copy_from_user,也有人解答。比如百度一下:但是这里面很多的解答没有回答到点子上,不能真正回答这个问题。我决定写篇文章正式回答一下这个问题,消除读者的各种疑虑。这个问题,我认为需要从2个层面回答第一个层次是为什么要拷贝,可不可以不拷贝?第二个层次是为什么要用copy_from_user而不是直接memcpy拷贝这个事情是必须的,这个事情甚至都跟Linux都没有什么关系。

2022-10-02 17:47:24 1648 1

原创 Linux内存空间知识复习

内核态和用户态:当进程线程运行在内核空间时就处于内核态,而进程线程运行在用户空间时则处于用户态;区分内核空间和用户空间的原因:应用程序随便访问内存太危险,比如把系统搞崩溃,清除操作系统的数据;linux操作系统采用虚拟地址空间,以32位系统为例,寻址空间是4G(2的32次方)。用户态到内核态的切换:当一个进程执行系统调用而陷入内核代码中执行时,称进程处于内核运行态;每个进程可以通过系统调用进入内核,内核空间由所有进程共享。内核空间是操作系统内核访问的区域,是受保护的内存空间。一、用户空间和内核空间。

2022-10-01 22:38:55 1994

原创 Android图形显示系统学习

App负责在画布上作画,画完的作品提交给SurfaceFlinger, 这个提交操作并不是把内存复制一份给SurfaceFlinger,而是把共享内存的控制权交还给SurfaceFlinger, SurfaceFlinger把拿来的多个应用的共享内存再送给HWC Service去合成。这里其实就是在用户空间使用libdrm库送显的过程。介绍了Android显示系统的硬件基础:SOC、DDIC、Panel,显示原理和LCD时序、LCD上的画面更新流程。1.介绍了DRM的基本组件、KMS的基本组件;...

2022-08-28 17:03:08 2255

转载 宋宝华:Linux的任督二脉——进程调度和内存管理

宋宝华,他有10几年的Linux开发经验。他长期在大型企业担任一线工程师和系统架构师,编写大量的Linux代码,并负责在gerrit上review其他同事的代码。Barry Song是Linux的活跃开发者,是某些内核版本的最活跃开发者之一(如https://lwn.net/Articles/395961/ 、

2022-08-19 22:58:38 2344

转载 宋宝华:世上最好的共享内存(Linux共享内存最透彻的一篇)

不能这么简单地理解,fd本身是一个进程级别的概念,每个进程有自己的fd的列表,比如进程B收到进程A的fd的时候,进程B自身fd空间里面自己的前面200个fd都已经被占用了,那么进程B接受到的fd就可能是201。这说明你还是没搞明白fd是一个进程内部的东西,是不能跨进程的概念。坦白讲,mmap、munmap这样的API让我找到了回家的感觉,刚入行做Linux的时候,写好framebuffer驱动后,就是把/dev/fb0 mmap到用户空间来操作,所以mmap这样的 API,真的是特别亲切,像亲人一样。

2022-08-19 19:08:47 857

原创 Linux DRM modesetting API分析

本文阅读总结自DavidRheinsberg的drm-howto代码,代码的编排非常用心。注释也写的相当详尽,是很好的DRM应用程序入门参考资料。

2022-07-31 19:25:39 1453

原创 Linux图形显示DRM子系统环境实践

学习Linux图形DRM子系统,还是需要有一个运行DRM框架的linux系统,这样无论在学习DRM应用程序还是驱动程序时,可以实际动手修改调试,运行看到效果,学习起来也是比较有动力和成就感的。下面是一个搭建LinuxDRM运行环境的实践。.........

2022-07-30 13:15:16 3210 1

原创 内存映射函数remap_pfn_range,用户进程虚拟地址空间学习

linux内存管理 内存映射

2022-07-10 15:42:27 429

原创 用QEMU模拟ARM开发板,搭建Linux kernel运行环境

QEMU ARM kernel

2022-07-09 12:36:26 2987

原创 Android源码下载编译进程记录

Android源代码下载编译

2022-06-24 23:14:40 1813 1

转载 Direct Rendering Manager - 基本概念

Direct Rendering Manager 基本概念 1 概述2 DRM2.1 libdrm2.2 KMS(Kernel Mode Setting)2.3 GEM(Graphics Execution Manager)2.3.1 Fence2.3.2 CMA(Conti...

2022-05-29 21:34:19 860

转载 msm8916 MDP(mobile display processor) 简介

硬件上面,Msm8916只有一个mipi-dsi接口用于连接LCM,由MDP(mobile display processor)进行管理,大概硬件结构图如下: mdp提供图片格式转换,旋转,overlay(overlay技术)等功能,dsi提供传输数据。 注意:overlay主要为了满足多界面叠加的需求,可理解为pipe,MDP支持3个overlay pipe。 &nb...

2022-05-26 22:44:52 2895

原创 Linux图形显示DRM框架学习

一、Direct Rendering Manager(DRM)是linux内核子系统,负责与显卡交互。DRM提供一组API,用户空间程序可以使用该API将命令和数据发送到GPU并执行诸如显示器的模式设置之类的操作。用户空间程序可以使用DRM API命令GPU执行硬件加速的3D渲染、视频解码、GPU计算。二、fbdev:Linux内核已经有一个fbdev的API,用来管理图形适配器的帧缓存区,但不能用于满足基于3D加速的现代基于GPU的视频硬件需求,这些设备通常需要在自己的内存中设置和管理命令队列,以将命令

2022-05-21 23:11:24 7938

转载 Linux graphic subsytem(1)_概述

图形子系统是linux系统中比较复杂的子系统之一:对下,它要管理形态各异的、性能各异的显示相关的器件;对上,它要向应用程序提供易用的、友好的、功能强大的图形用户界面(GUI)。因此,它是linux系统中少有的、和用户空间程序(甚至是用户)息息相关的一个子系统。 本文是图形子系统分析文章的第一篇,也是提纲挈领的一篇,将会从整体上,对linux显示子系统做一个简单的概述,进而罗列出显示子系统的软件构成,后续的文章将会围绕这些软件一一展开分析。 注1:本文所有的描述将以原生linux系统为例(如U..

2022-05-04 19:14:04 299

转载 Linux graphic subsystem(2)_DRI介绍

上篇文章(Linux graphic subsytem(1)_概述)介绍了linux图形子系统基本的软件框架,以及GUI、Windowing system、3D渲染等基本概念。文中提到了linux DRI(Direct Render Infrastructure)框架,但限于篇幅,没有过多介绍。 蜗蜗觉得,DRI在当前(或者说将来)的linux图形子系统中,有着举足轻重的地位,甚至可以说是新的linux图形框架核心思想的体现。本文将基于linux图形框架的发展历程,从Why、What和How三个角..

2022-05-04 19:06:44 539

原创 Android开机画面显示

一、fbconfbcon是帧缓冲区控制台,它在帧缓冲系统初始化时初始化:static int __initfbmem_init(void){ ... fb_console_init(); return 0;}void __init fb_console_init(void){ int i; console_lock(); fbcon_device = device_create(fb_class, NULL, MKDEV(0, 0), NULL, "fbc

2022-04-05 22:04:59 2418

转载 Jollen: Android 的 HAL 技術

Android 的 HAL 技術, #1: 簡介與發展現況 Android 的 HAL(硬體抽像層)是 Google 因應廠商「希望不公開源碼」的要求下,所推出的新觀念,其架構如下圖。雖然 HAL 現在的「抽象程度」還不足,現階段實作還不是全面符合 HAL 的架構規劃,不過也確實...

2022-03-20 12:21:45 262

转载 Android HAL层与Linux Kernel层驱动开发简介

近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记。 HAL:Hardware Abstract Layer 硬件抽象层,由于Linux Kernel需要遵循GPL开源协议,硬件厂商为了保护自己硬件方面的各项参数不被...

2022-03-19 21:52:54 2039

原创 gralloc模块在surfacefinger 进程的内存映射镜像

1、如何知道高通msm8953平台用的是哪一个gralloc模块文件?可以通过以下方式:msm8953_64:/vendor/lib64/hw # ps -A | grep surfacesystem 637 1 313936 28800 ep_poll 0 S surfaceflingermsm8953_64:/vendor/lib64/hw # cat /proc/637/maps7f297a6000-7f297a7000 rw-p 0000

2022-03-01 18:26:15 1650

转载 Android GUI系统学习1:Gralloc

Gralloc模块是从Android Eclair(android 2.1)開始增加的一个HAL模块,Gralloc的含义为是Graphics Alloc(图形分配)。他对上为libui提供服务,为其分配显存,刷新显示等。对下对framebuffer进行管理。gralloc代码通常位于hardware/libhardware/modules/gralloc文件夹下。包括下面几个文件:Android.mk  framebuffer.cpp  gralloc.cpp  ..

2022-02-28 22:17:37 2194

原创 android gralloc源码分析

1、gralloc模块通过struct private_module_t来描述struct private_module_t { gralloc_module_t base; private_handle_t* framebuffer; uint32_t flags; uint32_t numBuffers; uint32_t bufferMask; pthread_mutex_t lock; buffer_handle_t currentBuff

2022-02-26 19:50:48 3822 1

原创 android HAL源码学习

以lights模块为例进行分析,从上到下调用过程如下:1、LedService(java)frameworks/base/services/core/java/com/android/server/lights/LightsService.java public LightsService(Context context) { super(context); mNativePointer = init_native(); for (int i = 0

2022-02-20 18:31:51 1626

转载 android HAL 教程(含实例)

 http://www.cnblogs.com/armlinux/archive/2012/01/14/2396768.html Android Hal 分析                           &nbsp.

2022-02-20 16:19:00 6263

转载 多媒体架构---display介绍

前言: 此篇blog从LCD原理、Display基础知识、DSI介绍、HDMI相关、display原理概念相关、安卓中的Display Graphics框架、Qcom display框架这些点给大家介绍Display。 一、Display Overview  1.显示应用领域(mobile,PC) 2.其他相关领域(投影仪、VR眼镜) 二、LCD显示原理 1.背光IC发出亮光,通过下偏光片,液晶阵,透过...

2022-02-05 18:37:45 2176

转载 高通平台lcm 总结

以下几幅图是最近的一段时间对自己模块LCM的一些总结,目前只是完成了一部分,而且描述的不是特别到位,后期会不断更新和修改的。 第一幅是LCM的总体移植框架和组件图。介绍了LCM驱动的分部和调试屏的步骤和要点。 分lk和kernel两个部分,具体哪些.c,如何添加一块新屏,大体的步骤和方法。   第二幅图是屏的初始化流程图,分为lk和kernel两部分。Lk部分如下所示: 系统起来的时候会调用...

2022-02-05 15:10:30 958

转载 Linux Platform驱动模型(一) _设备信息

Linux Platform驱动模型(一) _设备信息我在Linux字符设备驱动框架一文中简单介绍了Linux字符设备编程模型,在那个模型中,只要应用程序open()了相应的设备文件,就可以使用ioctl通过驱动程序来控制我们的硬件,这种模型直观,但是从软件设计的角度看,却是一种十分糟糕的方式,它有一个致命的问题,就是设备信息和驱动代码冗余在一起,一旦硬件信息发生改变甚至设备已经不...

2022-02-03 16:17:46 304

转载 【Linux】LDD学习笔记——操作硬件——IO内存

原文出处:http://blog.chinaunix.net/uid-25014876-id-80627.html xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 在之前章节的驱动,都没有对硬件进行操作,接写来将从我之前学的裸板驱动开始,讲解在linux系...

2022-02-03 15:27:26 178

原创 高通平台msm8953 display子系统学习

硬件上,高通平台有一个mipi-dsi接口连接LCM,由MDP(mobile display processor)进行管理,就是一般说的LCD控制器软件上,高通平台提供MDSS(Multimedia Display Sub-system)进行管理软件驱动目录:kernel/msm-4.9/drivers/video/fbdev/msm主要分为三部分:MDP驱动:对使用的硬件资源进行初始化,同时在fb设备中注册mdp的使用接口,文件mdss_mdp3.cDSI驱动:解析模组厂商提供的panel的dt

2022-02-01 18:18:38 5764

转载 Linux字符设备中的两个重要结构体(file、inode)

对于Linux系统中,一般字符设备和驱动之间的函数调用关系如下图所示上图描述了用户空间应用程序通过系统调用来调用程序的过程。一般而言在驱动程序的设计中,会关系 struct file 和 struct inode 这两个结构体。用户空间使用open()系统调用函数打开一个字符设备时( int fd = open("dev/demo", O_RDWR) )大致有以下过程:在虚拟文件系统VFS中的查找对应与字符设备对应 struct inode节点遍历字符设备列表(ch

2022-01-16 15:25:17 1242

原创 Linux驱动字符设备添加接口区别

一、静态分配register_chrdev_region:devno = MKDEV(major,minor);ret = register_chrdev_region(devno, 1, “hello”);cdev_init(&cdev,&hello_ops);ret = cdev_add(&cdev,devno,1);二、动态分配alloc_chrdev_region:alloc_chrdev_region(&devno, minor, 1, “hello”)

2022-01-15 23:18:21 430

原创 Android display架构学习

一、Linux FrameBuffer 设备什么是framebuffer设备?Documentation\fb\framebuffer.rstfbmem.c

2021-12-26 21:47:16 2283

转载 Android Display 系统分析

Android display架构分析(一) http://hi.baidu.com/leowenj/blog/item/429c2dd6ac1480c851da4b95.html 高通7系列硬件架构分析 如上图,高通7系列 Display的硬件部分主要由下面几个部分组成: A、MDP 高通MSM7200A内部模块,主要负责显示数据的转换和部分图像处理功能理,如YUV转RGB,放大缩...

2021-11-29 22:03:00 1606

原创 linux spi 片选问题

spi通过片选信号来支持一个spi总线上支持挂载多个spi设备。具体实现就是通过一个spi设备对应一个片选gpio引脚,spi_device的chip_select成员即对应的片选引脚id。在设置spi传输是需要显性的设置chip_select,否则可能出现无法通信的问题......

2021-06-04 14:00:23 3797

转载 enable_irq_wake 中断唤醒低功耗模式的内核

低功耗模式 实现你所有驱动的supend和resume函数.注册一个中断唤醒源,一般是GPIO,RTC中断 .然后调用echo mem > state将系统挂起到内存中,这时候SDRAM在进行self-refresh的动作.基本电源的消耗在这里了 目前2.6.kernel已经为你作好了。你只需要在你每个驱动里按照接口函数suspend(...),和resume()将这个驱动的suspend 和r...

2021-05-25 18:18:23 820

原创 MTK平台执行disable_irq期间屏蔽掉的中断信号,会在我执行enable_irq后继续触发

https://bbs.csdn.net/topics/391952877https://blog.csdn.net/sususuda/article/details/78016975https://www.icxbk.com/ask/detail?tid=20456

2021-04-29 16:16:23 348

转载 【多线程编程】线程调度策略及优先级

通过之前的学习我知道了当前 Linux 系统下任务调度策略主要有三种: 1、SCHED_OTHER:普通任务调度策略。 2、SCHED_FIFO:实时任务调度策略,先到先服务。一旦占用cpu则一直运行,直到有更高优先级任务到达或自己放弃。 3、SCHED_RR:实时任务调度策略,时间片轮转。当任务的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾 保证了所有具有相同优先级的RR任务的调度公平。...

2021-04-08 11:00:19 1308

转载 linux内核调度策略SCHED_OTHER,SCHED_FIFO和SCHED_RR

 linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略,2,SCHED_FIFO实时调度策略,先到先服务3,SCHED_RR实时调度策略,时间片轮转  实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。 S...

2021-04-08 10:57:35 243

转载 linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)

 linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略,2,SCHED_FIFO实时调度策略,先到先服务3,SCHED_RR实时调度策略,时间片轮转  实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。 S...

2021-04-08 10:55:40 564 1

原创 device tree添加spi设备节点不成功的问题

在设备树中新添加了一个spi设备节点如下:&spi1 { gcore_touch@0 { compatible = "gcore,touchscreen"; spi-max-frequency = <1000000>; spi-cpha = <1>; spi-cpol = <1>; };};看起来没什么问题,但是在系统/sys/bus/spi/d

2021-04-01 21:09:10 4801

原创 Linux内核:firmware子系统

现在一般复杂的设备都需要运行固件才能正常工作,Linux如何给设备下载固件呢?

2021-03-08 16:38:33 705 1

网络聊天程序

linux下基于c语言的网络聊天程序代码,包含tcp和udp版本,希望可以帮到有兴趣学习网络编程的人

2016-01-18

C语言ntp协议

ntp协议示例程序,希望对ntp有兴趣的可以互相学习

2016-01-18

mini2440led控制测试程序

mini2440开发板led测试程序,配合驱动程序学习

2015-12-04

mini2440led驱动

mini2440开发板LED驱动程序,驱动程序开发入门最好

2015-12-04

空空如也

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

TA关注的人

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