自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 Linux map type uncache 和 write combine区别

这段时间被Map Cache Type坑了一次。GPU的PCI bar地址map成uncache 的还是 write combine?uncache(uc) : map后,CPU读写不经过Cachewrite combine(wb): map后,CPU读写同样不经过Cache,但是和Cache之间有一块buffer,以便于将多次连续小读写合成一次大读写。这是互联网上能查到的定义,但是实际应用并没有给出结论,什么情况下用什么,无脑用uc肯定是不会出错的。

2023-09-03 16:33:47 599

原创 Linux drm内存管理(二) TTM内存管理基础概念

通过之前的文章我们知道了TTM是在GEM的基础上实现的一套GPU内存管理框架,

2023-02-28 11:07:42 1829 1

原创 Linux drm内存管理(一) 浅谈TTM与GEM,为什么我们需要TTM和GEM?

目前Kernel中DRM中GPU的VRAM(GPU片上显存)的管理框架是有GEM和TTM,其中TTM早于GEM出现,GEM的出现是为了解决TTM复杂的使用方法,将大部分的VRAM管理实现逻辑交由厂商实现。

2022-12-16 09:45:26 2560

原创 Linux Driver优化S4 hibernate休眠速度

Driver可优化的地方1.S4 hibernate会冻结用户层和内核层的线程,内核层冻结如果用时超过0.001S是需要优化的。2.预分配之后Driver额外使用大量的page,造成image大小增加,增加image写入disk的时间。这个其实也蛮难优化,可以考虑free一些cache page,以及减少内存的使用,或者考虑使用shmem?3.Driver电源管理回调耗时,计算一下各回调的时间,找一下哪些耗时。Driver不可优化/难优化的:1.预分配阶段分配大量的page会耗时间。

2022-12-01 23:16:45 885 4

原创 从apt源中拉去源码手动编译debug版deb

手动编译deb包

2022-07-27 00:20:22 502

原创 UEFI EDK2 Ubuntu20.04上环境搭建记录与踩坑

UEFI EDK2 Ubuntu20.04上环境搭建记录与踩坑前言环境配置编译Qemu勘误编译成功,但是启动Emulator提示段错误编译不成功前言不是我不想更新博客,实在是没时间更新,一方面刚入职,公司有很多东西要学,另一方面,自己有很多坑没填完。最近在学习UEFI,先更新一波UEFI的学习过程。环境配置我使用的教材是罗冰编写的《UEFI编程实践》以及《UEFI编程原理》,前者针对更新版本的UEFI进行编写,所以我主要参考《UEFI编程实践》进行环境搭建。搭建的环境为:Vmware 15.0+U

2021-11-14 16:32:23 2684 3

原创 一次Vmware和Ubutun突发错误及解决方法

就在刚刚,我救回了我vmware中的一台Ubutun虚拟机,有很多修改过的驱动代码还没来得及上传Github,还好救回来了。事情起因:昨天我在buildroot中添加内核的字体库支持,给QT用,但是编译的时候提示UUID,Util-Linux未找到,我当时就很疑惑,这两个Ubutun本身就支持的啊。于是我想可能是版本太老了,就自做聪明的从Github上下载了最新版本,编译安装。之后Win10更新,我就重启电脑,等我再打开虚拟机的时候,虚拟机停留再GRUB界面,我想Win10怕不是更新把虚拟机弄坏了,果然

2021-05-11 08:26:42 131

原创 第一版F1C200S核心板

在很长一段时间里,我曾经陷入了硬件技术和软件技术以及资源发展不平衡的境遇。我之前是玩单片机的,单片机对硬件要去并不高,两层板,两路DC-DC就能亮,随便就能裁剪一下系统。在对ARM微处理器学习后,陷入了硬件水平不足的境遇,或者说穷。一般来说,ARM微处理器至少得六层板,六层板打样最少得500,我一直在尝试用四层板走六层板的线,很显然,这是想行不通的,按照高速PCB的规则四层是很难走下的,除非是不按规则。(这个给了我启发)后面我了解到还有ARM9这个微处理器,虽然性能不强没有SMP,但是该有的外设和MM

2020-10-26 16:29:41 2233 2

原创 Linux中断子系统学习笔记

Linux中断子系统学习笔记Linux下中断模型:外设(产生中断信号),中断控制器(负责处理外设产生的中断控制器),CPU工作原理:外设产生一个中断,通过irq request line向CPU方向通知中断发生。由于外设很多,所以使用中断控制器来集合中断信号,再传给CPU进行处理。中断控制器是连接外设中断系统和CPU系统的桥梁。根据外设irq request line的多少,中断控制器可以级联。CPU的主要功能是运算,因此CPU并不处理中断优先级,那是中断控制器的事情。对于CPU而言,一般有两种中断

2020-10-14 11:05:11 252

原创 Linux V4L2 源码分析

Linux V4L2 源码分析前言层次必要的数据结构源码分析ov2640.c前言Video For Linux 2真的是一个很复杂的框架,抽象倒不是它复杂的原因,是因为耦合了其他框架的内容,导致要掌握V4L2必须得需要一个非常广的内核层知识面,才能开始学习。这篇文章将会以ov2640.c为例子进行源码分析,我会尽量从上往下,也就是用户层调用到内核层进行分析。注:在Linux内核层学习,你得学会适应庞大代码给你带来的不安感。层次首先,像OV2640这样类似的摄像头传感器,是由多部分组成的,需要I

2020-10-13 10:05:25 1236

原创 va_start va_args va_end

1.函数发送调用过程中,形参从右到左入栈(不考虑寄存器)。2.va_list 是一个字符指针类型,可以理解为指向当前参数的一个指针,取参必须通过这个指针进行。3.对于void va_start ( va_list ap, prev_param ),ap是我们指定的指针,prev_param是位于可变参数左边的第一个变量,执行完成后,ap将指向可变参数中的第一个变量4.type va_arg ( va_list ap, type )获取参数,将ap以tpye类型位移,指向可变参数中下一个变量,并放回值。

2020-10-07 08:52:26 139

原创 深入理解FBTFT--编写自己的FB驱动2(Driver)

深入理解FBTFT--编写自己的FB驱动2 Driver前言FBTFT Driver过程FBTFT 图形写入内部函数之间的调用未完,更新中。。。前言我们之前完成了对fbtft_device.c的修改,使得在fboled_device.c只包含用于设置SPI控制器的信息,具体的显示屏信息我们将放在Driver中进行设置,为什么我们要这么做?按照fbtft_device.c中的思想,fbtft_device.c包含里大量显示屏的相关信息,这些信息将被提取传给driver,例如:像素长宽高等。在fbtft源

2020-10-02 19:38:57 1274 3

原创 DDR3布线规则

DDR3布线规则DDR信号的构成DDR信号的构成信号名功能描述CK,CK#全局时钟输入手机时钟使能信号导管$1Column 1Column 2centered 文本居中right-aligned 文本居右

2020-10-02 17:27:43 7737 3

原创 深入理解FBTFT--编写自己的FB驱动1(Device)

深入理解FBTFT--编写自己的FB驱动文章适用人群写前分析开始结尾文章适用人群本系列适合有一定内核基础,并向要往内核层发展的人阅读,应用层开发和0基础的人群不适合阅读本篇文章。本篇在Linux统一设备模型中,属于Device的教程。写前分析我们在不看源码前简单分析一下,FBTFT设备模块涉及到哪些组成部分。TBTFT控制显示屏主要通过SPI协议,应该会涉及到SPI设备的注册显示屏像素之类的信息设备模块比较简单,只负责添加一些描述数据传给驱动,另外在总线上申请资源。开始fbtft_de

2020-10-02 09:47:32 1193

原创 深入理解FBTFT--使用篇

深入理解FBTFT--使用篇文章背景文章目标正文材料:编辑Device添加Driver可能遇到的问题总结文章背景最近扣扣群里老是有人问fbtft该怎么用,为什么显示屏驱动不了,之前一直忙着学习Linux内核,国庆到了,该放假了(总结一波之前的学习成果了,顺便填坑),所以该系列是填坑系列。链接: 挖坑处:FBTFT源码逻辑分析没有看过的可以看一下,不看也没关系。总之虽然fbtft的代码年代久远已经停止维护被移在staging中,但是fbtft中逻辑的代码完全可以作为初学者第一篇理解内核模块的文章。那

2020-09-30 23:06:43 5862 8

原创 C语言常见误区——个人总结

C语言误区数组错误示范int n=5;int num[n]={1,2,3,4,5};错误,非法,n是可变的变量,禁止数组在下标为变量 初始化的时候同时赋值。const int n=5;int a [n]={1,2,3,4,5};同样错误,const对编译无影响,n同样是变量,const只影响编译前的检查。static const int n=5;int a [n]={1,2,3,4,5};还是错误,就算是放堆上,他还是变量,正确做法int n=5;int a[n];for

2020-09-24 11:48:55 427

原创 Linux PCI驱动学习小结--以8250.c文件为例子

PCI学习小结PCI规范这段时间学习了下Linux下PCI子系统和如何编写自己的PCI模块。总的来说,PCI协议清晰还是容易理解的。不过在查找相关资料的时候,碰到一些问题,这里顺便吐槽一下,分辨一篇教程和博客是否是让人读的身心愉快,就看它内容里对一些专用名词是否自己定义了名字,并且还不加解释,我看过不少国人的写的技术书籍教程,很多都出现了脱离原标准的自定义名词,或者不常见的名词,而且没有任何解释,这类书就是在害人,浪费时间,以至于我在选择技术书籍的时候都会避开国人写的。这都是题外话,一时起兴,现在进入

2020-08-11 10:09:16 994

原创 FBTFT源码逻辑分析

fbtft源码分析结构体宏定义结构体struct fbtft_gpio 储存管脚名字到GPIO号的映射struct fbtft_par; FBTFT主要的数据结构struct fbtft_ops类似与file_operations,定义了一些操作函数,大多数在fbtft_framebuffer_alloc()被指定了默认的回调函数struct fbtft_display 储存显示的参数struct fbtft_platform_data储存特定的数据,用于传递给驱动drive

2020-08-01 09:35:33 1393

原创 Linux fwnode和device_node的区别

Linux fwnode和device_node的区别废话不多说,直接开干。fwnode_property_read_u32(dev_fwnode(&client->dev), “rotation”, &rotation);为例子先看dev_fwnode();struct fwnode_handle *dev_fwnode(struct device *dev){ return IS_ENABLED(CONFIG_OF) && dev->of_node

2020-07-31 10:07:30 6211 4

原创 Arm Linux设备树学习笔记1

Arm Linux设备树学习笔记一开始初学设备树,碰到问题如下:第一:设备树的语法了解设备树的语法后第二:驱动是怎样和设备树进行交互的

2020-07-30 20:21:10 258

原创 Linux设备模型学习笔记(1)

Linux设备模型学习笔记1KobjectKobject, Kset和KtypeUeventsysfs文件系统wowo这里写的很好了:http://www.wowotech.net/device_model/13.htmlLinux内核等看wowo写的很有帮助我写一下我的理解。记录一下自己的学习历程,以免日后忘记。按照wowo的顺序写。学习Linux设备模型前先要了解一下内核大体上看Linux内核是分层架构,设备模型也是同样的,分层的架构有助于Linux代码变得简洁。之前有接触过STM32

2020-07-30 09:57:31 239

原创 脱离X86,在ARM Linux上独立编译模块

在ARM Linux上独立模块编译单个文件Makefile实例Hello模块实例编译挂载模块查看模块的输出多个文件Makefile实例编译Hello模块实例挂载模块卸载模块前面的博客我们使用X86主机完成了Linux内核和模块的编译,在使用ARM Linux进行开发的时候,我们需要编写自己的模块,用X86主机当然可以完成模块的编译,但是如果能使用ARM主机直接编译,就能方便很多。同样内核也是可以在ARM上完成编译的,做到我编译我自己。但是ARM性能弱,不建议编译内核,但是编译个模块还是绰绰有余的。单个文

2020-07-25 21:55:09 347

原创 ARM Debian启动桌面图形界面,基于全志H3

ARM Debian启动桌面图形界面,基于全志H3回顾目标回顾之前我们在博客中完成了主线U-boot和Linux内核,以及Debian buster文件系统的编译和烧入,不出意外,现在香橙派是能正常工作的。目标在这篇博客中,我们的重点是搭建好图形环境,启动桌面。由于全志公司的重点是在安卓上,所以在H3的GPU驱动上,如果需要在Linux上安装全志的硬解驱动,会遇到许多未知的问题并且驱动不稳定。...

2020-07-24 18:09:34 5329

原创 ARM Debian buster根文件系统的建立

ARM Debian buster根文件系统的建立目标步骤先插上TF卡并且mount挂载下载Debian根文件系统和模拟器挂载根文件系统到主机上进入qemu虚拟机解压debian 10替换源配置ssh服务器配置 /etc/fstab 挂载添加一个普通用户和修改root密码设置网络拷贝外部模块退出虚拟器写入根系统目标上文中我们成功编译并启动了内核,内核和文件系统的关系感兴趣的可以查查,这里不多BB了。通过烧入文件系统,我们实现在香橙派上正常运行使用Linux。步骤在x86 Linux主机上使用qe

2020-07-24 09:58:38 2160 2

原创 香橙派全志H3烧入U-boot和Linux内核以及配置

全志H3烧入U-boot和Linux内核以及配置1.U-boot的烧入和U-boot环境配置1.1U-boot烧入和启动测试2.编译完的内核处理和烧入2.1处理内核2.2烧入内核1.U-boot的烧入和U-boot环境配置1.1U-boot烧入和启动测试需要的材料:准备一张性能良好的TF卡,不要用淘宝那种几块钱包邮的TF卡,容易坏读卡器之前编译得到的u-boot-sunxi-with-spl.bin文件首先先清除TF卡上所有分区(也可以不清除)接着输入:dd if=u-boot-sunxi

2020-07-23 20:26:07 8721 1

原创 全志H3主线U-Boot及Linux编译流程总结

全志H3主线U-Boot及Linux编译写这篇文章的目的:1.设置交叉编译链环境2.编译U-boot-2020-043.主线内核编译写这篇文章的目的:一个月前买了块香橙派One,现在又入手了块香橙派Pc plus,结果当初的编译流程有点记不清楚了,编译又耽误了一个下午的时间,看来还是要总结一下。在这篇文章里,使用的U-boot版本为2020-04。使用的Linux内核版本为5.3.5+(可能不是主线内核,因为是从香橙派Github上下载的5.3.5,所以和主线的内核会有稍微的区别)。负责交叉编译的

2020-07-23 16:33:59 5296 1

空空如也

空空如也

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

TA关注的人

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