主流的嵌入式处理器 家族有三个:arm ,intel_x86,MIPS。
arm主要面向手机、平板,功耗低
arm和x86的运算力、性能好,MIPS相对较弱
嵌入式常用的非易失存储包括:nor flash,nand flash,emmc
nand flash:价低,速快,有坏块
nor flash:价高,速慢,无坏块
emmc:相当于nand 和 nor的结合,内置坏块管理系统;价高
USB四线接口简单介绍
开发电脑选择:核心越多越好,主频越高越好----->编译工程快
设置ubuntu系统ip的方法:右上角找到设置图标,选择network,点齿轮图标号,在ipv4下面设置地址192.168.1.x,子网掩码255.255.255.0,网关192.168.1.1(必须要使windows,ubuntu,开发板处于同一网段,能互相ping通)
U盘连接到主机和UBUNTU相互转换:虚拟机右下角,右键连接or断开
shell常用指令
ls -a:显示所有目录,文件夹,隐藏文件/目录
ls -l:显示文件的权限、修改时间等
ls -al:上面两个结合
ls 目录:显示该目录下的文件
–
cd /:进入linux根目录
cd ~:/home/jl
–
uname :查看系统信息
uname -a :查看全部系统信息
–
cat 文件名:显示某文件内容
–
sudo :临时 切换root用户
sudo apt-get install 软件名 :装某软件
sudo su:直接切换root用户(少用)
sudo su jl:切换回普通用户
–
touch 文件名:创建文件
rm -r 目录/文件:删除文件/目录及它包含的所有内容
rm -f 文件:直接删除,无需确认
rm -i 文件:删除文件,会逐一询问是否删除
rmdir 目录:专门删除目录
mv :可以用来移动文件/目录,也可以用来重命名
–
ifconfig:显示网络配置信息(lo:本地回环测试)
ifconfig -a:显示所有网卡(上面只显示工作的,本条显示所有工作和未工作的)
ifconfig eth0 up:打开eth0这个网卡
ifconfig eth0 down:关闭eth0这个网卡(0一般要sudo来执行)
ifconfig eth0 你想设置的地址:重设eth0的ip地址
–
命令 --help:看看这个命令的帮助信息
reboot:重启
–
sync:数据同步写入磁盘命令(一般来说,用户写的内容先保存在一个缓冲区,系统是隔一定时间像磁盘写入缓冲区内写入磁盘),用sync立刻写入
grep ”“ -i :搜索时忽略大小写
grep 默认是匹配字符, -w 选项默认匹配一个单词
例如我想匹配 “like”, 不加 -w 就会匹配到 “liker”, 加 -w 就不会匹配到
du 目录/文件 -sh : 查看某一文件/目录的大小,也可以到一个目录下du -sh,查看这个目录的大小
目录下使用du -sh 查看目录总的大小
du 文件名 -sh 查看指定文件的大小
df:检查linux服务器的文件系统 磁盘空间占用情况,默认以kb为单位
gedit 文件:使用gedit软件打开一个文件(类似于windows下面的记事本)
ps:查看您当前系统有哪些进程,ubuntu(多用户)下是ps -aux,嵌入式linux(单用户)下面是ps
top:进程实时运行状态查询
file 文件名:查看文件类型
ubuntu的fs
cd / :根目录,一切都是从根目录发散开来的
/bin:存放二进制可执行文件,比如一些命令
/boot:ubuntu的内核与启动文件
/cdrom:有光盘是存放光盘文件
/dev:存放设备驱动文件
/etc:存放配置文件,如账号和密码文件(加密后的)
/home:系统默认的用户主文件夹
/lib:存放库文件
/lib64:存放库文件,. so时linux下面的动态库文件
/media:存放可插拔设备,如sd,u盘就是挂载到这个文件下面
/mnt:用户可使用的挂载点,和media类似,可以手动让可插拔设备挂载到/mnt
/opt:可选的文件和程序存放目录,给第三方软件放置的目录
/proc:存放系统的运行信息,实在内存上的不是在flash上,如cat /proc/cpuinfo
/root:系统管理员目录,root用户才能访问的文件
/sbin:和bin类似,存放一些二进制可执行文件,sbin下面一般是系统开机过程中所需要的命令
/srv:服务相关的目录,如网络服务
/sys:记录内核信息,是虚拟文件系统
/tmp:临时目录
/usr:不是user的缩写,而是UNIX Software Resource的缩写,存放系统用户有关的文件,占很大空间
/var:存放变化的文件,如日志文件
–
移植就是移植上面这些文件
磁盘管理
linux开发一定要选用FAT32格式的U盘或者SD卡
u盘在/dev中的名字是sd*,要确定是哪个,拔了看少了哪个。就是哪个
/dev/sdb表示U盘,/dev/sdb1表示U盘的第一个分区,一般U盘 sd卡只有一个分区
df:显示linux系统的磁盘占用情况
在一个目录里使用du -sh:查看这个目录里面所有内容所占用的资源
du 文件名 -sh:一般用来看单个文件/目录的大小
du -h --max-depth=n:显示n级目录的大小
–
磁盘的挂载与取消挂载:
mount 和 umount
sudo mount /dev/sdb1 /media/jl/udisk
sudo umount /media/jl/u盘名 (-f 强制取消挂载),如果u盘正在使用,如被另一个终端打开,那么该指令无效
mount挂载后中文显示乱码的解决方法
sudo mount -o iocharset=utf8 /dev/sdb1 udisk
–
磁盘的分区和格式化
sudo fdisk -l /dev/sdb 查看所有分区信息(–help查看别的用法)
sudo fdisk /dev/sdb1 ----> m ( 进入帮助 ) ----> d 删除该分区 ----> wq 保存并退出
mkfs -t vfat /dev/sdb1
mkfs -t vfat /dev/sdb2
mkfs -t vfat /dev/sdb3 给分区1,2,3分别格式化,完成后能在图形界面看见三个u盘图标格式化u盘之前一定要先卸载u盘已经挂载的系统。
–
压缩和解压缩
linux下常用的压缩扩展名:
.tar
.tar.bz2
.tar.gz
后两个linux常用
windows下面用7zip软件
右键选中文件,选择7zip,添加到压缩包,压缩格式选择tar,仅存储
生成tar文件,这里只是打包,没有压缩
右键上面的tar文件,选择7zip,添加到压缩包,压缩格式选择bzip2,确定
生成.tar.bz2文件,把它放到ubuntu解压
ubuntu也支持解压.tar和.zip,但后面两个常用
–
ubuntu下面的压缩工具时gzip
压缩文件
gzip 文件名:压缩文件,变成 原文件名.gz,原来的文件就不见了
解压缩文件
gzip -d ** .gz:还原 ** 文件
gzip -r 目录:递归,将该目录里的各个文件压缩,不提供打包服务
–
bzip2工具负责压缩和解压缩.bz2格式的压缩包
bzip2 -z 文件名,压缩成 文件名.bz2
bzip2 -d 文件名.bz2,解压缩成 文件名
bzip2不能压缩/解压缩 目录
–
打包工具 tar
常用参数
-f:使用归档文件(必须要在所有选项后面)
-c:创建一个新归档
-x:从归档中解出文件
-j:使用bzip2压缩格式
-z:使用gzip压缩格式
-v:打印出命令执行过程
如以bzip2格式压缩,打包
tar -vcjf 目录名.tar.bz2 目录名
如将上面的压缩包解包
tar -vxjf 目录名.tar.bz2
–
其他压缩工具
rar工具
sudo apt-get install rar(用dhcp连不上阿里云的镜像)
rar a test.rar test 把test压缩成test.rar
rar x test.rar 把test.rar解压缩成test
–
zip工具
压缩
zip -rv test.zip test
解压缩
unzip test.zip
–
ubuntu的用户和用户组
linux是多用户的os,不同的用户有不同的权限,可以查看和操作不同的文件
有三种用户
1、初次用户
2、root用户
3、普通用户
root用户可以创建普通用户
linux用户记录在/etc/passwd这个文件内
linux用户密码记录在/etc/shadow这个文件内,不是以明文记录的
每个用户都有一个id,叫做UID
–
linux用户组
为了方便管理,将用户进行分组,每个用户可以属于多个组
可以设置非本组人员不能访问一些文件
用户和用户组的存在就是为了控制文件的访问权限的
每个用户组都有一个ID,叫做GID
用户组信息存储在/etc/group中
passwd 用户名:修改该用户的密码
–
ubuntu文件权限
ls -al 文件名
如以b开头:
-brwx - rwx - rwx -:b表示 块文件,设备文件里面可供存储的周边设备
以d开头是目录
以b是块设备文件
以-开头是普通文件
以 l 开头表示软连接文件
以c开头是设备文件里的串行端口设备
-rwx - rwx - rwx -:用户权限,用户组内其他成员,其它组用户
数字 1 表示链接数,包括软链接和硬链接
第三列 jl 表示文件的拥有者
第四列 jl 表示文件的用户组
第五列 3517 表示这个文件的大小,单位是字节
ls -l 显示的文件大小单位是字节
ls -lh 现实的文件大小单位是 M / G
第六七八列是最近修改时间
最后一列是文件名
–
修改文件权限命令
chmod 777 文件名
修改文件所属用户
sudo chown root 文件
修改文件用户组
sudo chown .root 文件
同时修改文件用户和用户组
sudo chown jl.jl 文件
修改目录的用户/用户组
sudo chown -r jl.jl 目录( root.root )
–
linux连接文件
1、硬连接
2、符号连接(软连接)
linux有两种连接文件,软连接/符号连接,硬连接
符号连接类似于windows下面的快捷方式
硬连接通过文件系统的inode连接来产生新文件名,而不是产生新文件
inode:记录文件属性,一个文件对应一个inode,
inode相当于文件ID
查找文件要先找到inode,然后才能读到文件内容
–
ln 命令用于创建连接文件
ln 【选项】源文件 目标文件
不加选项就是默认创建硬连接
-s 创建软连接
-f 强制创建连接文件,如果目标存在,就先删掉目标文件,再创建连接文件
–
硬连接:多个文件都指向同一个inode
具有向inode的多个文件互为硬连接文件,创建硬连接相当于文件实体多了入口
只有删除了源文件、和它所有的硬连接文件,晚间实体才会被删除
可以给文件创建硬连接来防止文件误删除
改了源文件还是硬连接文件,另一个文件的数据都会被改变
硬连接不能跨文件系统(另一个格式的u盘中的文件)
硬连接不能连接到目录
出于以上原因,硬连接不常用
ls -li:此时第一列显示的就是每个文件的inode
–
软连接/符号连接
类似windows下面的快捷方式
使用较多
软连接相当于串联里一个独立的文件,该文件会让数据读取指向它连接的文件
ln -s 源文件 目标文件
特点:
可以连接到目录
可以跨文件系统
删除源文件,软连接文件也打不开了
软连接文件通过 “ -> ” 来指示具体的连接文件(ls -l)
创建软连接的时候,源文件一定要使用绝对路径给出,(硬连接无此要求)
软连接文件直接用cp复制到别的目录下,软连接文件就会变成实体文件,就算你把源文件删掉,该文件还是有效
正确的复制、移动软连接的用法是:cp -d
如果不用绝对路径,cp -d 软连接文件到别的目录,该软连接文件就会变红,失效
如果用了绝对路径,cp -d 软连接文件到别的目录,该软连接文件还是有效的,还是软连接文件
不用绝对路径,一拷贝就会出问题
–
软连接一个目录,也是可以用cp -d复制到其他位置的
–
gedit 是基于图形界面的
vim有三种模式:
1、一般模式:默认模式,用vim打开一个文件就自动进入这个模式
2、编辑模式:按 i,a等进入,按esc回到一般模式
3、命令行/底行模式:在一般模式下输入:/ ?可进入命令行模式 ,按esc回到一般模式
一般模式下,dd删除光标所在的一整行;
ndd,删除掉光标所在行和下面的一共n行
点 . 重复上一个操作
yy复制光标所在行
小p复制到光标下一行
大p复制到光标上一行n
nyy复制光标所在往下n行
设置vim里的tab是四个空格:在/etc/vim/vimrc里面添加:set ts=4
设置vim中显示行号:在上面那个文件里添加:set nu
–
vscode是编辑器
gcc能编译汇编,c,cpp
电脑上的ubuntu自带的gcc用来编译x86架构的程序,而嵌入式设备的code要用针对于该芯片架构如arm的gcc编译器,又叫做交叉编译器(在一种架构的电脑上编译成另一种架构的代码)
gcc -c 源文件:只编译不链接,编译成.o文件
-o 输出文件名( 默认名是 *.out )
-O 对程序进行优化编译,这样产生的可执行文件执行效率更高
-O2:比-O幅度更大的优化,但编译速度会很慢
-v:显示编译的过程
gcc main.c 输出main.out的可执行文件
预处理 --> 编译 --> 汇编 --> 链接
–
makefile里第一个目标默认是终极目标
其他目标的顺序可以变
makefile中的变量都是字符串
变量的引用方法 : $ ( 变量名 )
–
Makefile中执行shell命令默认会把命令本身打印出来
如果在shell命令前加 @ ,那么shell’命令本身就不会被打印
–
赋值符:=
变量的有效值取决于他最后一次被赋值的值
: =
赋值时右边的值只是用前面已经定义好的,不会使用后面的
?=
如果左边的前面没有被赋值,那么在这里赋值,佛则就用前面的赋值
+ =
左边前面已经复制了一些字串,在这里添加右边的内容,用空格隔开
–
模式规则
% . o : % . c
%在这里意思是通配符,只能用于模式规则
依赖中 % 的内容取决于目标 % 的内容
–
CFLAGS:指定头文件的位置
LDFLAGS:用于优化参数,指定库文件的位置
LIBS:告诉链接器要链接哪些库文件
VPATH:特殊变量,指定源文件的位置,冒号隔开,按序查找源文件
vpath:关键字,三种模式,指定、清除
–
自动化变量
$ @ 规则中的目标集合
$ % 当目标是函数库的时候,表示规则中的目标成员名
$ < 依赖文件集合中的第一个文件,如果依赖文件是以 % 定义的,那么 $ < 就是符合模式的一系列文件的集合
$ ? 所有比目标新的依赖文件的集合,以空格分开
$ ^ 所有依赖文件的集合,用空格分开,如果有重复的依赖文件,只保留一次
$ + 和 $ ^ 类似,但有多少重复文件都会保留
$ * 表明目标模式中 % 及其以前的部分
如果目标是 test/a.test.c,目标模式是 a.%.c,那么 $ *就表示 test/a.test
–
常用的是 $@ , $< , $^
–
Makefile的伪目标
不生成目标文件,只是执行它下面的命令
如果被错认为是文件,由于伪目标一般没有依赖,那么目标就被认为是最新的,那么它下面的命令就不会执行 。
如果目录下有同名文件,伪目标错认为是该文件,由于没有依赖,伪目标下面的指令不会被执行
伪目标声明方法
.PHONY : clean
那么就算目录下有伪目标同名文件,伪目标也同样会执行
–
条件判断
ifeq
ifneq
ifdef
ifndef
–
–
交互式shell
有输入有输出
输入:read
第三行 name在这里作为变量,read输入这个变量
下一行使用这个变量直接是 $name,不用像 Makefile 里面那样子加括号
read -p “读取前你想打印的内容” 变量1 变量2 变量3…
–
数值计算
第五行等于号两边不能有空格
右边计算的时候是 $( ( ) ),注意要两个括号
–
test 测试命令
文件状态查询,字符、数字比较
&&
cmd1 && cmd2
当cmd1执行完并且正确,那么cmd2也执行
当cmd2执行完并且错误,那么cmd2不执行
||
cmd1 || cmd2
当cmd1执行完并且正确,那么cmd2不执行
当cmd2执行完并且错误,那么cmd2也执行
查看一个文件是否存在
–
测试两个字符串是否相等
==两边必须要有空格,如果不加空格,test这句就一直是对的。
–
中括号判断符
[ ]
作用和test类似
里面只能输入 == 或者 !=
四个箭头所指必须用空格隔开
而且如果变量是字符串的话,一定要加双引号
–
默认变量
$0——shell脚本本身的命令
$#——最后一个参数的标号(1,2,3,4…)
$@——表示 $1 , $2 , $3 …
$1
$2
$3
–
shell 脚本的条件判断
if [ 条件判断 ];then
//do something
fi
红点处都要加空格
exit 0——表示退出
–
if 条件判断;then
//do something
elif 条件判断;them
//do something
else
//do something
fi
红线处要加空格
–
case 语句
case $var in
“第一个变量的内容”)
//do something
;;
“第二个变量的内容”)
// do something
;;
.
.
.
“第n个变量的内容”)
//do something
;;
esac
不能用 “*”,否则就不是通配符的意思,而是表示字符*
–
shell 脚本函数
function fname(){
//函数代码段
}
其中function可以写也可以不写
调用函数的时候不要加括号
shell 脚本函数传参方式
–
shell 循环
while[条件] //括号内的状态是判断式
do
//循环代码段
done
–
until [条件]
do
//循环代码段
done
–
for循环,使用该循环可以知道有循环次数
for var con1 con2 con3 … …
do
//循环代码段
done
–
for 循环数值处理
for((初始值;限制值;执行步长))
do
//循环代码段
done
– 红点处必须要加空格!!
loop 环
–
–
注意变量有的地方用了 $ ,有的地方不需要 $
这里的赋值号两边都不用加 空格
$(())数值运算