Skip to content

Commit 677d0f0

Browse files
committed
增加我以前做的一些笔记
1 parent 921235c commit 677d0f0

File tree

6 files changed

+407
-1
lines changed

6 files changed

+407
-1
lines changed

driver.md

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
驱动开发注意事项
2+
1.不能访问C库
3+
2.只有一个很小的定长堆栈
4+
3.没有内存保护机制
5+
4.浮点数很难使用,应该使用整型数
6+
Kconfig 描述了所属目录源文档相关的内核配置菜单,用于make menuconfig中的配置
7+
menu "Network device support"
8+
config NETDEVICES
9+
bool "Enable Net Devices" 菜单类型
10+
depends on NET 该项依赖项,如果没有选中NET,则不会显示这项菜单。
11+
default y 默认yes
12+
help 帮助信息
13+
This is help desciption。
14+
...
15+
endmenu
16+
菜单类型有: bool []
17+
tristate <> 三态(内建 模块 移除)
18+
string 字符串
19+
hex () 十六进制
20+
integer 整型
21+
.config make menuconfig之后保存的文件
22+
Makefile
23+
obj-y += foo.o 默认由foo.c或者foo.s 编译得到
24+
obj-m += foo.o 默认编译成模块
25+
vmlinux 是由linux源码编译后未压缩的内核
26+
linux内核Makefile:(由5部分组成)
27+
1.Makefile : 顶层Makefile。
28+
2..config: kernel配置文件。
29+
3.arch/xxx/Makefile: 具体架构的Makefile。
30+
4.scripts/Makefile.xxx : 通用规则。
31+
5.kbuild Makefile: 整个kernel中大约有数百个这种文件。
32+
33+
arch/$ARCH/configs 默认的配置文件
34+
/driver/vidio 对应Graphics support 代表显卡
35+
36+
file_operations 驱动程序操作功能结构体
37+
open()
38+
release()
39+
read()
40+
write()
41+
ioctl() 对设备设置控制参数
42+
llseek()修改文件当前的读写位置
43+
poll() 查询设备是否可读可写
44+
45+
framebuffer
46+
字符设备 /dev/fbX 主设备号为29
47+
代码:
48+
include/linux/fb.h
49+
driver/video/fbmem.c
50+
用户操作:
51+
ioctl() 获取/设置信息
52+
mmap()映射内存
53+
fbmem.c 提供用户接口
54+
xxxfb.c 提供硬件操作接口
55+
编译操作
56+
make bzImage 编译生成压缩的内核二进制文件
57+
make vmlinux 编译生成二进制内核文件
58+
make modules 编译生成内核模块
59+
make modules_install 安装模块
60+
make bzdisk|fdimage|isoimage 编译生成启动软盘镜像或者光盘镜像
61+
make install 安装内核文件
62+
make all 相当于vmlinux+modules+bzImage
63+
make rpm 构建内核rpm包
64+
make foo/bar/foobar.ko 编译单个驱动
65+
make header_install 安装内核头文件
66+
make M=some/sub/dir 编译指定目录
67+
make O=/path/to/some/dir指定生成的文件放到该目录
68+
make kernelversion 输出内核版本信息
69+
make kernelrelease 输出内核发行标识
70+
make rpm-pkg|deb-pkg|tar-pkg|targz-pkg|tarbz2-pkg 构建这种格式的内核包
71+
make clean 清除生成文件(保留.config和部分模块文件)
72+
make mrproper 清除全部文件(包括.config和备份文件)
73+
make distclean 在make mrproper上还清除编辑器其他的备份文件
74+
75+
modules.order 记录了Makefile中模块出现的顺序
76+
.o.cmd 表示生成该对象的具体命令
77+
78+

gpu.md

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
vivante :图芯技术有限公司
2+
用于android 3.0版本的平板系统中(Honeycomb)
3+
gpu显卡联系方式 :yaowen.[email protected]13816214198
4+
三星galaxy tab4 7.0 (T230 T231)
5+
硬件抽象层 :Hardware Abstraction Layer (HAL)
6+
Alpha Blending :是按照“Alpha”混合向量的值来混合源像素和目标像素的一种图像处理技术。
7+
android SurfaceFlinger: SurfaceFlinger服务负责绘制Android应用程序的UI
8+
android专有驱动:
9+
1)Android Ashmem 匿名共享内存; 为用户空间程序提供分配内存的机制
10+
2)Android Logger 轻量级的LOG(日志) 驱动;
11+
3)Android Binder 基于 OpenBinder 框架的一个驱动;
12+
4)Android Power Management 电源管理模块;
13+
5)Low Memory Killer 低内存管理器;
14+
6)Android PMEM 物理内存驱动;
15+
7)USB Gadget USB 驱动(基于 gaeget 框架);
16+
8)Ram Console 用于调试写入日志信息的设备;
17+
9)Time Device 定时控制设备;
18+
10)Android Alarm 硬件时钟;
19+
android 上的设备驱动:
20+
1)Framebuff surfaceflinger gralloc 显示驱动;
21+
2)Event 输入设备驱动;
22+
3)ALSA 音频驱动;
23+
4)OSS 音频驱动;
24+
5)v412摄像头:视频驱动;
25+
6)MTD 驱动;
26+
7)蓝牙驱动;
27+
8)WLAN 设备驱动;
28+
29+
OpenGL: 开放图形库 open graphics library 用于生成2D 3D图像,有350個不同的函數调用
30+
OpenGL ES:(OpenGL for Embedded Systems)是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计
31+
OpenVG:(Open Vector Graphics)2D矢量图形处理标准函式库
32+
OpenCL:(Open Computing Language)开放运算语言
33+
DirectFB:(Direct Frame Buffer),提供硬体图形加速库
34+
GDI: (Graphics Device Interface),图形设备接口,负责系统与绘图程序之间的信息交换
35+
DirectDraw:DirectDraw是DirectX中的关于视频输入输出的基本部分,使用DirectDraw可以方便地编制出高效的视频处理程序,只要用户的硬件支持DirectDraw,就能保证你的代码可以处理它们。
36+
Skia: Android中的2D图形库
37+
libagl: Android中通过软件方法实现的一套OpenGL动态库
38+
libhgl: 为区别libagl,自定义的一种叫法。特指GPU厂商提供的硬件实现的OpenGL
39+
render: 特指使用OpenGL动态库进行3D渲染
40+
copybit:Android使用2D引擎来加速图形操作(主要是Surface之间的composition操作)的一种技术,对应着一个或几个动态库。
41+
pmem: Android特有驱动,从linux内核中reserve物理连续内存,可以为2d、3d引擎、vpu等设备分配物理连续内存。
42+
43+
使用GPU硬件加速需要做的工作
44+
1.Linux内核方面:
45+
添加GPU驱动支持,以模块方式编译GPU驱动,Android启动时加载内核模块。
46+
添加PMEM支持,预留内存供GPU使用
47+
2.Android方面:
48+
添加copybit HAL
49+
修改gralloc gralloc负责显存等的分配,以及对framebuffer操作
50+
修改libagl
51+
修改surfaceflinger
52+
framebuffer
53+
文件节点/dev/graphics/fb*
54+
JZ4770:使用GC860 gpu
55+
缩略词:
56+
BSP 板级开发包
57+
DE Draw Engine 绘画引擎?
58+
DRI Direct Rendering Infrastructure (基层直接渲染),一个安全且有效率的直接对显示硬件存取的方法,DRI的一个主要目的就是提供高效能的OpenGL支持,DRI是由一系列的软件模块组成。引入DRI的目的是为了3D图形加速,DRI是一个软件架构,用来协调linux kernel,X windows系统,3D图形硬件以及OpenGL渲染引擎之间的工作。
59+
DRM Direct Rendering Manager(),DRM驱动用来处理DMA,内存管理,资源锁以及安全硬件访问。linux DRM层用来支持那些复杂的显卡设备
60+
EXA X Window Acceleration for 2D
61+
FE Graphics Pipeline Front End
62+
GAL Graphics Abstraction Layer
63+
GDI Graphics Device Interface
64+
HI Host Interface
65+
ICD Installable Client Driver
66+
MC Memory Controller
67+
OCL OpenCL
68+
PA Primitive Assembly
69+
PE Pixel Engine
70+
RA Rasterizer
71+
SE Setup Engine
72+
SH Shader
73+
SMP Symmetric Multiprocessing
74+
SoC System on Chip
75+
TX Texture Engine
76+
GPU具有高并行结构(highly parallel structure),所以GPU 在处理图形数据和复杂算法方面拥有比CPU 更高的效率
77+
Shade Language(着色语言)有:GLSL(High Level ShadingLanguage)Cg语言(C for Graphic)
78+
图形绘制管线分为三个主要阶段
79+
应用程序阶段
80+
几何阶段:顶点坐标变换、光照、裁剪、投影以及屏幕映射
81+
光栅阶段,基于几何阶段的输出数据,为像素(Pixel)正确配色,绘制完整图像,每个像素的信息存储在颜色缓冲器(color buffer 或者frame buffer)中
82+
83+
84+
85+
86+
87+
88+
89+
90+

linux.md

+45
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,21 @@ cat /var/log/messages
9595
-v:显示不包含匹配文本的所有行。
9696
-w:只匹配整个单词。
9797
-E:扩展的正则表达式
98+
-R:递归搜寻
9899
--exclude=FILE:跳过FILE
99100
```
101+
正则表达式主要参数:
102+
\:忽略正则表达式中特殊字符的原有含义。
103+
^:匹配正则表达式的开始行。
104+
$:匹配正则表达式的结束行。
105+
\<:从匹配正则表达式的行开始。
106+
\>:到匹配正则表达式的行结束。
107+
[]:单个字符,如[A]即A符合要求 。
108+
[-]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
109+
.:所有的单个字符。
110+
*:有字符,长度可以为0。
111+
112+
100113
经典使用方法
101114
```sh
102115
#所有以d开头的文件,包含test的匹配行
@@ -106,6 +119,38 @@ grep -inE "test|zephyr" d*
106119
#包含test和zephyr 不区分大小写 显示行号 扩展正则表达式
107120
grep -in "test" d* | grep 'zephyr'
108121
```
122+
123+
主要参数:
124+
-c:只输出匹配行的计数。
125+
-I:不区分大小写(只适用于单字符)。
126+
-h:查询多文件时不显示文件名。
127+
-l:查询多文件时只输出包含匹配字符的文件名。
128+
-L:列出不匹配的文件名
129+
-n:显示匹配行及行号。
130+
-s:不显示不存在或无匹配文本的错误信息。
131+
-v:显示不包含匹配文本的所有行。
132+
-R:递归搜寻
133+
-d skip:不递归搜寻
134+
-w:匹配整个单词
135+
正则表达式主要参数:
136+
\:忽略正则表达式中特殊字符的原有含义。
137+
^:匹配正则表达式的开始行。
138+
$:匹配正则表达式的结束行。
139+
\<:从匹配正则表达式的行开始。
140+
\>:到匹配正则表达式的行结束。
141+
[]:单个字符,如[A]即A符合要求 。
142+
[-]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
143+
.:所有的单个字符。
144+
*:有字符,长度可以为0。
145+
146+
grep 'test' d* 显示以d开头的文件中包含的test行
147+
grep 'test' aa bb cc 查找文件aa bb cc 中匹配的test行
148+
grep 'test'|'hello' files 匹配test或者hello
149+
grep '\<man' files 匹配manic 和man 不匹配batman
150+
grep '\<man\>' 只匹配man 不匹配batman和manic
151+
grep '^man' files 匹配的字符行首
152+
grep '$man' files 匹配的字符串仔行尾
153+
109154
### find
110155
用法
111156
```sh

makefile.md

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
# 目录
22

3+
= 基本的赋值 会在makefile的最后才赋值
4+
:= 覆盖之前的值 会立即赋值
5+
?= 如果没有赋值过就赋值
6+
+= 添加后面的值
7+
8+
.PHONY : clean 伪目标
9+
make命令支持的文件名: GNUmakefile makefile Makefile
10+
include makefile包含
11+
-include makefile包含,当include过程中出现错误,不报错继续执行
12+
MAKEFILES make会自动include这个环境变量中的值
13+
14+
VPATH 指定makefile文件搜寻路径
15+
vpath make 关键词 设置文件搜寻路径
16+
vpath %.h ../headers 设置头文件搜索路径为../headers
17+
$(shell pwd) makefile调用shell执行pwd命令
18+
19+
320
## Makefile内建函数
421

522
### 文本处理和分析函数
@@ -162,4 +179,4 @@ files := $(shell echo *.c)
162179
$(info text) #打印log
163180
$(warning text) #和 error 一样,但是 产生致命错误退出
164181
$(error text) #产生致命错误,并提示“text”信息给用户,并退出 make 的执行
165-
```
182+
```

0 commit comments

Comments
 (0)