宋宝华: Linux为什么一定要copy_from_user ? 网上很多人提问为什么一定要copy_from_user,也有人解答。比如百度一下:但是这里面很多的解答没有回答到点子上,不能真正回答这个问题。我决定写篇文章正式回答一下这个问题,消除读者的各种疑虑。这个问题,我认为需要从2个层面回答第一个层次是为什么要拷贝,可不可以不拷贝?第二个层次是为什么要用copy_from_user而不是直接memcpy拷贝这个事情是必须的,这个事情甚至都跟Linux都没有什么关系。
Linux内存空间知识复习 内核态和用户态:当进程线程运行在内核空间时就处于内核态,而进程线程运行在用户空间时则处于用户态;区分内核空间和用户空间的原因:应用程序随便访问内存太危险,比如把系统搞崩溃,清除操作系统的数据;linux操作系统采用虚拟地址空间,以32位系统为例,寻址空间是4G(2的32次方)。用户态到内核态的切换:当一个进程执行系统调用而陷入内核代码中执行时,称进程处于内核运行态;每个进程可以通过系统调用进入内核,内核空间由所有进程共享。内核空间是操作系统内核访问的区域,是受保护的内存空间。一、用户空间和内核空间。
Android图形显示系统学习 App负责在画布上作画,画完的作品提交给SurfaceFlinger, 这个提交操作并不是把内存复制一份给SurfaceFlinger,而是把共享内存的控制权交还给SurfaceFlinger, SurfaceFlinger把拿来的多个应用的共享内存再送给HWC Service去合成。这里其实就是在用户空间使用libdrm库送显的过程。介绍了Android显示系统的硬件基础:SOC、DDIC、Panel,显示原理和LCD时序、LCD上的画面更新流程。1.介绍了DRM的基本组件、KMS的基本组件;...
宋宝华:Linux的任督二脉——进程调度和内存管理 宋宝华,他有10几年的Linux开发经验。他长期在大型企业担任一线工程师和系统架构师,编写大量的Linux代码,并负责在gerrit上review其他同事的代码。Barry Song是Linux的活跃开发者,是某些内核版本的最活跃开发者之一(如https://lwn.net/Articles/395961/ 、
宋宝华:世上最好的共享内存(Linux共享内存最透彻的一篇) 不能这么简单地理解,fd本身是一个进程级别的概念,每个进程有自己的fd的列表,比如进程B收到进程A的fd的时候,进程B自身fd空间里面自己的前面200个fd都已经被占用了,那么进程B接受到的fd就可能是201。这说明你还是没搞明白fd是一个进程内部的东西,是不能跨进程的概念。坦白讲,mmap、munmap这样的API让我找到了回家的感觉,刚入行做Linux的时候,写好framebuffer驱动后,就是把/dev/fb0 mmap到用户空间来操作,所以mmap这样的 API,真的是特别亲切,像亲人一样。
Linux DRM modesetting API分析 本文阅读总结自DavidRheinsberg的drm-howto代码,代码的编排非常用心。注释也写的相当详尽,是很好的DRM应用程序入门参考资料。
Linux图形显示DRM子系统环境实践 学习Linux图形DRM子系统,还是需要有一个运行DRM框架的linux系统,这样无论在学习DRM应用程序还是驱动程序时,可以实际动手修改调试,运行看到效果,学习起来也是比较有动力和成就感的。下面是一个搭建LinuxDRM运行环境的实践。.........
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...
msm8916 MDP(mobile display processor) 简介 硬件上面,Msm8916只有一个mipi-dsi接口用于连接LCM,由MDP(mobile display processor)进行管理,大概硬件结构图如下: mdp提供图片格式转换,旋转,overlay(overlay技术)等功能,dsi提供传输数据。 注意:overlay主要为了满足多界面叠加的需求,可理解为pipe,MDP支持3个overlay pipe。 &nb...
Linux图形显示DRM框架学习 一、Direct Rendering Manager(DRM)是linux内核子系统,负责与显卡交互。DRM提供一组API,用户空间程序可以使用该API将命令和数据发送到GPU并执行诸如显示器的模式设置之类的操作。用户空间程序可以使用DRM API命令GPU执行硬件加速的3D渲染、视频解码、GPU计算。二、fbdev:Linux内核已经有一个fbdev的API,用来管理图形适配器的帧缓存区,但不能用于满足基于3D加速的现代基于GPU的视频硬件需求,这些设备通常需要在自己的内存中设置和管理命令队列,以将命令
Linux graphic subsytem(1)_概述 图形子系统是linux系统中比较复杂的子系统之一:对下,它要管理形态各异的、性能各异的显示相关的器件;对上,它要向应用程序提供易用的、友好的、功能强大的图形用户界面(GUI)。因此,它是linux系统中少有的、和用户空间程序(甚至是用户)息息相关的一个子系统。 本文是图形子系统分析文章的第一篇,也是提纲挈领的一篇,将会从整体上,对linux显示子系统做一个简单的概述,进而罗列出显示子系统的软件构成,后续的文章将会围绕这些软件一一展开分析。 注1:本文所有的描述将以原生linux系统为例(如U..
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三个角..
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
Jollen: Android 的 HAL 技術 Android 的 HAL 技術, #1: 簡介與發展現況 Android 的 HAL(硬體抽像層)是 Google 因應廠商「希望不公開源碼」的要求下,所推出的新觀念,其架構如下圖。雖然 HAL 現在的「抽象程度」還不足,現階段實作還不是全面符合 HAL 的架構規劃,不過也確實...
Android HAL层与Linux Kernel层驱动开发简介 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记。 HAL:Hardware Abstract Layer 硬件抽象层,由于Linux Kernel需要遵循GPL开源协议,硬件厂商为了保护自己硬件方面的各项参数不被...
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
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 ..