嵌入式重点文档格式.docx
《嵌入式重点文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式重点文档格式.docx(52页珍藏版)》请在冰豆网上搜索。
Nandflash不可以片内执行程序,写数据较norflash快。
)
RAM:
RandomAccessMemory
随机存取,数据掉电丢失、读写速度快、并行读写
静态RAM:
SRAM
动态RAM:
DRAM、SDRAM、DDRRAM
基本结构:
地址译码器、存储矩阵和读\写控制电路构成。
✧字符设备与块设备;
字符设备:
以字节为单位进行数据处理。
通常只允许按顺序访问,一般不使用缓存技术。
如鼠标,声卡等。
块设备:
以块为单位进行处理,块的大小通常为0.5KB到32KB等。
大多数块设备允许随机访问,而且常常采用缓存技术。
块设备有硬盘、光盘驱动器等。
可以查看文件/proc/devices获得。
✧根文件系统的构建(怎么去构建一个根文件系统);
构建根文件系统就是往相应的目录添加相应的文件。
1.添加设备文件、2.添加动态库、3.添加内核模块、4.添加系统应用程序、5.配置系统初始化文件
2.
(1)Linux的根文件系统包括支持linux系统正常运行的基本内容,至少应包括以下几项内容:
基本的文件系统结构,如bin、dev、etc、sbin,lib、usr、proc。
基本程序运行所需的动态库。
基本的系统配置文件。
必要的设备文件支持。
基本的应用程序,如sh、ls、cp等。
(2)构建根文件系统就是往相应的目录添加相应的文件。
如:
在/dev添加设备文件,
在/etc添加配置文件,
在/bin添加命令或者程序,
在/lib添加动态库等。
✧RAM、ROM的连线规则(最高位怎么确定);
(考)
地址线的连接取决于总线宽度
连接方法:
原因:
CPU寻址以字节为单位,即1Byte=8bit
对于8位存储器,正好对应,即【A0:
A7】->
【ADDR0:
ADDR7】
对于16位存储器,乘2,即左移1位,即【A0:
A15】->
【ADDR1:
ADDR16】
对于32位存储器,乘4,即左移2位,即【A0:
A31】->
【ADDR2:
ADDR32】
SDRAM接线方法:
BA0,BA1地址线:
代表SDRAM的最高位
BA0,BA1确定原则:
由SDRAM的设计容量与BANK数量决定
例如:
8M,4BANK
·
8M=2^23,即23根地址线·
4BANK,即需要两根BANK线
故:
BA0<
=>
ADDR21·
BA1<
ADDR22
✧权限设置(例如:
0664代表什么);
-rw-r--r--1rootroot42304Sep418:
26install.log
在“1”之前的那一串就是这个文件的权限
第一个字符:
代表这个文件的是“目录、文件或链接文件等”
“d”——表示目录
“-”——表示文件
“l”——(字母L的小写)表示连接文件
“b”——表示设备文件里面的可供存储的接口设备
“c”——表示设备文件里面的串行端口设备,如键盘等
接下来的字符:
以3个为一组,共三组,且均为“rwx”的3个参数(按顺序)的组合。
r—可读,
w—可写,
x—可执行,
“-”(减号)—没有权限,
第一组(2-4):
文件所有者的权限(用户user的权限),
第二组(5-7):
用户所在组(group)的权限,
第三组(8-10):
其他用户(others)的权限。
(接着那个“1”数字表示连接数,后面两个root,分别是文件所有者和文件所属用户组,后面是文件的大小,最后被修改的日期,文件名。
重点:
上面的rwx可以参照8421的方式转化为数字,如果rwx都存在的话,那么它的数值为7,要记得有三组权限,所以转化后的数值是个三位数:
r:
对应数值4
w:
对应数值2
x:
对应数值1
-:
对应数值0
三个组每一个组占一位,这样形成如下数字组合:
0001为其他人的执行权限;
0002为其他人的写权限;
0004为其他人的读权限;
0010为组的执行权限;
0020为组的写权限;
0040为组的读权限;
0100为所有者的执行权限;
0200为所有者的写权限;
0400为所有者的读权限;
权限掩码示例:
-rwx------等于数字表示700。
-rwxr—r--等于数字表示744。
-rw-rw-r-x等于数字表示665。
drwx—x—x等于数字表示711。
drwx------等于数字表示700。
-rwxrwxrwx数值是777
-rw-r--r--数值是644(多用)
-rwxr-xr-x数值是755(多用)
改变文件属性与权限:
三个命令:
chgrp:
改变文件所属用户组
chown:
改变文件所有者
chmod:
改变文件的权限(多用)
命令使用方式:
chmod后面可以加u(用户)g(组)o(其他人)a(所有人)
chmoda+w.bashrc(这个是要加权限的文件名)
意思是给这个文件加写,所有人都可以向这个文件写入东西
+(加入)
-(除去)
=(设置)
格式:
chmod--用户--加或减或等于--rwx--文件名
其中,rwx可以用数值代替。
✧常见的文件系统:
针对Flash的有哪些?
针对RAM的有哪些?
基于FLASH的文件系统:
JFFS2、YAFFS、Cramfs、Romfs
基于RAM的文件系统:
Ramdisk、ramfs/tmpfs
✧常用的操作命令(例如怎么拷贝一个文件到某个指定目录);
PPT“Linux常用命令”
目录文件命令:
Ls目录文件信息:
ls[选项][目录或文件]
选项:
-a显示指定目录下所有子目录与文件,包括隐藏文件。
-A显示指定目录下所有子目录与文件,包括隐藏文件。
但不列出“.”和“..”。
-c按文件的修改时间排序。
-C分成多列显示各项。
-d如果参数是目录,只显示其名称而不显示其下的各文件。
往往与l选项一起使用,以得到目录的详细信息。
-i在输出的第一列显示文件的i节点号。
-l以长格式来显示文件的详细信息。
这个选项最常用。
-R递归式地显示指定目录的各个子目录中的文件。
-s给出每个目录项所用的块数,包括间接块。
pwd显示当前目录:
显示当前绝对路径
cd进入某一个目录:
cd
[目的目录]
ln创建文件链接:
ln[选项]目标[链接名]
mv移动或改名文件:
mv[options]源文件或目录目标文件或目录,移动和修改文件名
cp拷贝文件:
cp[选项]源文件或目录目标文件或目录,从源文件拷贝到目标文件或路径
mkdir创建目录:
mkdir[选项]dirname
rm删除文件:
rm[参数]文件名或目录名
find查找文件
✧常用的编译命令(例如:
gcc-o-s/-p,-s/-p代表什么意思);
1.gcc-Esource_file.c
-E,只执行到预编译。
直接输出预编译结果。
2.gcc-Ssource_file.c
-S,只执行到源代码到汇编代码的转换,输出汇编代码。
3.gcc-csource_file.c
-c,只执行到编译,输出目标文件。
4.gcc(-E/S/c/)source_file.c-ooutput_filename
-o,指定输出文件名,可以配合以上三种标签使用。
-o参数可以被省略。
这种情况下编译器将使用以下默认名称输出:
-E:
预编译结果将被输出到标准输出端口(通常是显示器)
-S:
生成名为source_file.s的汇编代码
-c:
生成名为source_file.o的目标文件。
无标签情况:
生成名为a.out的可执行文件。
5.gcc-gsource_file.c
-g,生成供调试用的可执行文件,可以在gdb中运行。
由于文件中包含了调试信息因此运行效率很低,且文件也大不少。
这里可以用strip命令重新将文件中debug信息删除。
这是会发现生成的文件甚至比正常编译的输出更小了,这是因为strip把原先正常编译中的一些额外信息(如函数名之类)也删除了。
用法为stripa.out
6.gcc-ssource_file.c
-s,直接生成与运用strip同样效果的可执行文件(删除了所有符号信息)。
7.gcc-Osource_file.c
-O(大写的字母O),编译器对代码进行自动优化编译,输出效率更高的可执行文件。
-O后面还可以跟上数字指定优化级别,如:
gcc-O2source_file.c
数字越大,越加优化。
但是通常情况下,自动的东西都不是太聪明,太大的优化级别可能会使生成的文件产生一系列的bug。
一般可选择2;
3会有一定风险。
8.gcc-Wallsource_file.c
-W,在编译中开启一些额外的警告(warning)信息。
-Wall,将所有的警告信息全开。
9.gccsource_file.c-L/path/to/lib-lxxx-I/path/to/include
-l,指定所使用到的函数库,本例中链接器会尝试链接名为libxxx.a的函数库。
-L,指定函数库所在的文件夹,本例中链接器会尝试搜索/path/to/lib文件夹。
-I,指定头文件所在的文件夹,本例中预编译器会尝试搜索/path/to/include文件夹。
✧编译过程还有每个过程生成的是什么文件(例如.s/.o/.so/.a分别代表的是什么文件);
gcc支持的文件类型(记住)
后缀
说明
.c
C源程序
.o
编译后的目标程序
.h
头文件
.s
汇编语言源程序
.i
经过预处理的C程序
.S
经过预编译的汇编程序
gcc编译过程:
1、预编译:
处理头文件和预编译语句——gcc-