Skip to content

Commit aaacaeb

Browse files
committed
整理文档
1 parent d9f1906 commit aaacaeb

File tree

6 files changed

+248
-226
lines changed

6 files changed

+248
-226
lines changed

c基础.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
* [指针的指针](#指针的指针)
1111
* [main函数的返回值](#main函数的返回值)
1212
* [const](#const)
13-
* [const T*](#"const T*")
1413
* [浮点数存储方式](#浮点数存储方式)
1514
* [c题目](#c题目)
1615
* [printf返回值](#printf返回值)

driver.md

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

7898

gpu.md

Lines changed: 82 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,86 @@
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)中
1+
## vivante图芯技术有限公司
822

3+
## 硬件抽象层
4+
Hardware Abstraction Layer (HAL)
5+
## Alpha Blending
6+
是按照“Alpha”混合向量的值来混合源像素和目标像素的一种图像处理技术。
7+
## android SurfaceFlinger
8+
SurfaceFlinger服务负责绘制Android应用程序的UI
9+
10+
## android专有驱动
11+
12+
|驱动|说明|
13+
|-|-|
14+
|`Android Ashmem`|匿名共享内存; 为用户空间程序提供分配内存的机制|
15+
|`Android Logger`|轻量级的LOG(日志)驱动|
16+
|`Android Binder`|基于 OpenBinder 框架的一个驱动|
17+
|`Android Power Management`|电源管理模块|
18+
|`Low Memory Killer`|低内存管理器|
19+
|`Android PMEM`|物理内存驱动|
20+
|`USB Gadget`|USB 驱动(基于 gaeget 框架)|
21+
|`Ram Console`|用于调试写入日志信息的设备|
22+
|`Time Device`|定时控制设备|
23+
|`Android Alarm`|硬件时钟|
24+
25+
## android 上的设备驱动
26+
27+
|驱动|说明|
28+
|-|-|
29+
|`Framebuff`|显示驱动|
30+
|`surfaceflinger`|显示驱动|
31+
|`gralloc`|显示驱动|
32+
|`Event`|输入设备驱动|
33+
|`ALSA`|音频驱动|
34+
|`OSS`|音频驱动|
35+
|`v412`|摄像头视频驱动|
36+
|`MTD`|驱动|
37+
||蓝牙驱动|
38+
|`WLAN`|wifi驱动|
39+
40+
## android 图形名词
41+
42+
|名词|说明|
43+
|-|-|
44+
|`OpenGL`|开放图形库(open graphics library)用于生成2D 3D图像|
45+
|`OpenGL ES`|(OpenGL for Embedded Systems)是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计|
46+
|`OpenVG`|(Open Vector Graphics)2D矢量图形处理标准函式库|
47+
|`OpenCL`|(Open Computing Language)开放运算语言|
48+
|`DirectFB`|(Direct Frame Buffer),提供硬体图形加速库|
49+
|`GDI`|(Graphics Device Interface),图形设备接口,负责系统与绘图程序之间的信息交换|
50+
|`DirectDraw`|DirectX中的关于视频输入输出的基本部分,使用DirectDraw可以方便地编制出高效的视频处理程序,只要用户的硬件支持DirectDraw,就能保证你的代码可以处理它们。|
51+
|`Skia`|Android中的2D图形库|
52+
|`libagl`|Android中通过软件方法实现的一套OpenGL动态库|
53+
|`libhgl`|为区别libagl,自定义的一种叫法。特指GPU厂商提供的硬件实现的OpenGL|
54+
|`render`|特指使用OpenGL动态库进行3D渲染|
55+
|`copybit`|Android使用2D引擎来加速图形操作(主要是Surface之间的composition操作)的一种技术,对应着一个或几个动态库。|
56+
|`pmem`|Android特有驱动,从linux内核中reserve物理连续内存,可以为2d、3d引擎、vpu等设备分配物理连续内存。|
57+
58+
59+
## 使用GPU硬件加速需要做的工作
60+
* Linux内核方面:
61+
* 添加GPU驱动支持,以模块方式编译GPU驱动,Android启动时加载内核模块。
62+
* 添加PMEM支持,预留内存供GPU使用
63+
* Android方面:
64+
* 添加copybit HAL
65+
* 修改gralloc gralloc负责显存等的分配,以及对framebuffer操作
66+
* 修改libagl
67+
* 修改surfaceflinger
68+
## framebuffer
69+
framebuffer字符设备
70+
71+
设备位于`/dev/graphics/fb*`,主设备号为29
72+
相关代码:
73+
```sh
74+
include/linux/fb.h
75+
driver/video/fbmem.c
76+
fbmem.c # 提供用户接口
77+
xxxfb.c # 提供硬件操作接口
78+
```
79+
用户操作:
80+
|函数|说明|
81+
|-|-|
82+
|`ioctl()`|获取/设置信息|
83+
|`mmap()`|映射内存|
8384

8485

8586

linux.md

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,41 +1533,6 @@ target xxx : prerequisites aaa
15331533
|C++filt |链接器ld通过该命令可过滤C++符号和JAVA符号,防止重载函数冲突。|
15341534
|gprof |显示程序调用段的各种数据|
15351535

1536-
### 简单的makefile
1537-
```makefile
1538-
CROSS_COMPILE=/opt/4.5.1/bin/arm-linux-
1539-
1540-
CC=$(CROSS_COMPILE)gcc
1541-
AS=$(CROSS_COMPILE)as
1542-
LD=$(CROSS_COMPILE)ld
1543-
1544-
CFLAGS=-g -Wall
1545-
LIBS=-lpthread
1546-
1547-
all:main
1548-
1549-
main:main.o gsm_gprs.o socket.o telosb.o wifi.o
1550-
$(CC) $(CFLAGS) $(LIBS) $^ -o $@
1551-
1552-
main.o: main.c gsm_gprs.h option.h telosb.h
1553-
$(CC) $(CFLAGS) -c $<
1554-
1555-
gsm_gprs.o:gsm_gprs.c gsm_gprs.h socket.h
1556-
$(CC) $(CFLAGS) -c $<
1557-
1558-
socket.o:socket.c socket.h option.h
1559-
$(CC) $(CFLAGS) -c $<
1560-
1561-
telosb.o: telosb.c telosb.h option.h
1562-
$(CC) $(CFLAGS) -c $<
1563-
1564-
wifi.o: wifi.c wifi.h option.h
1565-
$(CC) $(CFLAGS) -c $<
1566-
1567-
clean:
1568-
-rm main -f *\.o *\*~ *~
1569-
```
1570-
15711536
### nm命令
15721537
显示二进制目标文件的符号表
15731538
```sh

0 commit comments

Comments
 (0)