嵌入式Linux应用开发
ubuntu的目录

怎么设置PATH?

Linux的命令提示符

cd ~ 表示用户 家目录

Linux的相对路径

Linux的man命令

Linux的vi编辑器的使用



Linux的which和whereis命令

Linux的压缩命令






Makefile
Makefile的核心——规则:
目标 : 依赖1 依赖2 …
[TAB] 命令
语法:
a. 通配符:%.o
$@ 表示目标
$< 表示第1个依赖文件
$^ 表示所有依赖文件
b. 假想目标: .PHONY
//makefile例子 test:a.o b.o c.o gcc -o test $^ %.o:%.c gcc -c -o $@ $< clean: rm *.o test .PHONY:clean
A := xxx #A的值即刻确定,在定义时即确定 B = xxx #B的值使用到时才确定 := #即时变量 = #延时变量 ?= #延时变量,如果是第一次定义才起效,如果在前面该变量已定义则忽略这句 += #附加,它是即时变量还是延时变量取决于前面的定义 //makefile例子 A := $(C) B = $(C) C = abc all: @echo A = $(A) @echo B = $(B) C += 123
Makefile函数
$(foreach var,list,text) 遍历 $(filter pattern...,text) 在text中取出符合pattern格式的值 $(filter-out pattern...,text) 在text中取出不符合pattern格式的值 $(wildcard pattern) pattern定义了文件名的格式,wildcard取出其中存在的文件 $(patsubst pattern,replacement,$(var)) 从列表中取出每一个值,如果符合pattern,则替换成replacement
改进:支持头文件依赖
gcc -M c.c //打印出依赖 gcc -M -MF c.d c.c //把依赖写入文件c.d gcc -c -o c.o c.c -MD -MF c.d //编译c.o,把依赖写进文件c.d

// Makefile说明 本程序的Makefile分为3类: 1.顶层目录的Makefile 2.顶层目录的Makefile.build 3.各级子目录的Makefile 一、各级子目录的Makefile: 它最简单,形式如下: EXTRA CFLAGS := CFLAGS_file.o := obj-y += file.o obj-y += subdir/ “obj-y+=file.o” 表示把当前目录下的file.c编进程序里, "obj-y+= subdir/” 表示要进入subdir这个子目录下去子找文件来编进程序里,是哪些文件由subdir目录下的Makefile决定。 "EXTRA_CFLAGS", 它给当前目录下的所有文件(不含其下的子目录)设置额外的编译选项,可以不设置 "CFLAGS_xxx.o", 它给当前目录下的xxx.c设置它自己的编译选项,可以不设置 注意: 1."subdir/"中的斜杠"/"不可省略* 2.顶层Makefile中的cFLAGs在编译任意一个.c文件时都会使用 3.CFLAGS EXTRA_CFLAGS CFLAGS_xxx.o三者组成xxx.c的编译选项 二、顶层目录的Makefile: 它除了定义obj-y来指定根目录下要编进程序去的文件、子目录外, 主要是定义工具链前缀CROSS_COMPILE, 定义编译参数CFLAGS, 定义链接参数LDFLAGS, 这些参数就是文件中用export导出的各变量。 三、顶层目录的Makefile.build: 这是最复杂的部分,它的功能就是把某个目录及它的所有子目录中、需要编进程序去的文件都编译出来,打包为built-in.o 详细的讲解请看视频。 四、怎么使用这套Makefile: 1.把顶层Makefile,Makefile.build放入程序的顶层目录 在各自子目录创建一个空白的Makefile 2.确定编译哪些源文件 修改顶层目录和各自子目录Makefile的obj-y: obj-y += xxx.o obj-y += yyy/ 这表示要编译当前目录下的xxx.c,要编译当前目录下的yyy子目录 3.确定编译选项、链接选项 修改顶层目录Makefile的CFLAGS,这是编译所有.c文件时都要用的编译选项; 修改顶层目录Makefile的LDFLAGS,这是链接最后的应用程序时的链接选项; 修改各自字目录下的Makefile: "EXTRA_CFLAGS", 它给当前目录下的所有文件(不含其下的子目录)设置额外的编译选项,可以不设置 "CFLAGS_xxx.o", 它给当前目录下的xxx.c设置它自己的编译选项,可以不设置 4.使用哪个编译器? 修改顶层目录Makefile的CROSS_COMPILE,用来指定工具链的前缀(比如arm-linux-) 5.确定应用程序的名字: 修改顶层目录Makefile的TARGET,这是用来指定编译出来的程序的名字 6.执行"make"来编译,执行"make clean"来清除,执行"make distclean"来彻底清除
文件I/O 读写文件
文件从哪里来?
- 磁盘、flash、SD卡、U盘
对于硬件上真实的文件需要挂载才能访问到,要先mount - Linux提供的虚拟文件系统,也要先mount
- 特殊文件 /dev/xxx 设备节点
Framebuffer应用编程

bpp:bits per pixel 每个像素用多少位来表示它的颜色

首地址+offset,就可以确定这个地址在Framebuffer的哪里

ASCII字符点阵显示


汉字区位码
HZK16中是以GB2312编码值来查找点阵的,以“中”字为例,它的编码值是“0xd6-0xd0”,其中的0xd6表示“区码”,表示在哪一个区:第“0xd6–0xa1”区;其中的0xd0表示“位码”,表示它是这个区里的哪一个字符:第“0xd0-0xa1”个。每一个区有94汉字。区位码从0xa1而不是从0开始,是为了兼容ASCII码。
- 编译程序时去哪找头文件?
系统目录:就是交叉编译工具链里的某个include目录;
也可以自己指定:编译时用“-I dir”选项指定。 - 链接时去哪找库文件?
系统目录:就是交叉编译工具链里的某个lib目录;
也可以自己指定:链接时用“-L dir”选项指定。 - 运行时去哪找库文件?
系统目录:就是板子上的/lib、/usr/lib目录;
也可以自己指定:运行程序用环境变量LD_LIBRARY_PATH指定。 - 运行时不需要头文件,所以头文件不用放到板子上
常见错误的解决方法
1.头文件问题
编译时找不到头文件。在程序中这样包含头文件:#include-
对于尖括号里的头文件,去哪里找它?
系统目录:就是交叉编译工具链里的某个include目录;
也可以自己指定:编译时用“.-I dir”选项指定。
怎么确定“系统目录”?
执行下面命令确定目录:
echo ‘main() {}’ | arm-linux-gcc -E -v –
echo ‘main() {}’ | arm-linux-gcc -E -v –
error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directorye
export LD_LIBRARY_PATH=/xxx_dir ; ./test 或 LD_LIBRARY_PATH=/xxx_dir ./test

输入系统框架

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217740.html原文链接:https://javaforall.net
