前提:安装好VMWare虚拟机和在虚拟机上安装好ubuntu系统
ps: 如何生成可执行文件到嵌入式Linux中?
- 在Ubuntu系统上编写C程序
- 利用交叉编译工具将C程序经过预处理、编译、汇编、链接生成可执行文件
- 在嵌入式系统中输入ifconfig 获得ip地址
- 通过scp 命令将本地文件发送到ip设备的指定目录下
- 进入嵌入式系统,执行可执行文件
ps: 因为linux的ssh,需要能够ping通网络;笔记本没有以太网接口,可以买个RJ45网线接口,在等待过程中,先来熟悉下我们的Linux相关知识
在虚拟机中,桥接模式通常用作局域网之间通信,且将所有设备的ip地址设置在同一网口;NAT模式下,可以自动DHCP。并且在windows上的网络设置上,需要将VMware Network Adapter属性中的VMware Bridge Protocol 勾选上。
此外,检测网络是否连接上,可以通过ping命令,例: ping www.baidu.com,有数据传回表明网络顺利连通外网,也可以ping 某个ip地址,表明局域网连通。
ps: 如果觉得终端字体太小,可以按CTRL+shift+= ;觉得太大,可以按CTRL+ -。
主要介绍几个主要的一级目录(没有全部介绍)
bin: 存放系统命令
dev: 存放设备文件
etc:配置文件
home:家目录,如果有桌面,一般放置在这个目录下
lib:库文件目录
usr:user software resource
mnt:外部设备挂载位置
proc:虚拟文件系统,进程信息及内核信息等相关文件
a. ls 查看当前文件夹下的文件
用的多的参数
-l 显示文件类型执行权限,文件类型有:-(一般文件)d(目录)l(链接)p(管道)s(套接字)b(block文件)c(字符文件)
-a 所有文件
b. ln 链接
分为软链接和硬链接
加参数 -s 生成软链接,相当于快捷方式
c. cd 文件夹 :作用为进入到指定文件夹下
cd ~: 进入home目录下
cd /:进入根目录下
cd -: 上一次目录下
cd .: 进入父目录
cd . . .. .. :进入子目录
d. cp a b :复制
e. mv a b,:移动或重命名命令
f. rm 文件:作用为删除该文件,举个例子:sudo rm -rf /* 删库跑路命令 -r 为迭代,-f 为强制(force)
g. pwd: 查询当前目录
h. mkdir 目录名: 创建目录
a. chmod: 更改文件权限,分别可以+rwx,也可以 777,分别给所有者、所在组、其他所有的权限
b. chown:改变文件拥有者
c. chgrp:改变文件所在组
d. umask: 生成掩码,生成的文件权限为 777-umask
e. touch :生成文件,文件均没有执行权限
a. echo 命令: 输出内容到目标文件
echo a > a.txt 将a放进a.txt,a.txt必须有w权限
echo b >>a.txt 追加b在a.txt的最后一行,a.txt必须有w权限
cat a.txt 显示 a.txt 的文本,,a.txt必须有r权限,cat 可以用more/less 等命令替换
b. find 命令:查找文件
参数
-maxdepth 限制查找层数
-type : 后面带下列参数f、d、 l、 p、 s、 c、 b(同1.1.2 a)
-name
查找的内容给其他命令使用使用管道:需要参数xargs
使用-exec:需要以\ ; ; ;结尾
c. file 命令:查看文件类型
d. grep 查找文件中的字符
a. tar
-zcvf z压缩成gzip c create v visual f file
-jcvf j压缩成bzip2
解压缩 将c 替换为 x
b. gzip 和gunzip
c. bzip2 和bunzip2
man:manual,可以用作手册,使用方法为 man 【第几卷】 需要查询的命令
sudo apt-get install ***
sudo aptitude install ***
a. ps
-aux 显示用户,进程号等信息
-ajx 显示进程信息
b. kill: 发送信号
kill -9 pid号: 杀掉进程
i/a/o : 进入编辑模式
esc:退出到命令模式
在命令模式下输入 :为末行模式
输入 :wq 保存退出
在命令模式下,按[数字]H或J或K或L:向左、向下、向上或向右移动多少
dd: 删除一行
dw:删除一个单词
d$或D:删除到行尾
d0:删除到行首
[行数]yy 复制
p 粘贴
查找格式为:/查找内容 回车 按n下一个 N上一个
替换格式为::%s /被替换/替换 -g
在{ 上按%:跳转到对应的},反之亦然
按#或n:跳转到上一个单词
N:下一个
u : 撤回
ctrl+r:取消
在末行模式 输入vsp 文件名,可以在旁边打开该文件,按ctrl+W+W,可以切换
在命令模式下,按K跳转到posix命令,方便看函数传参类型和用法
gcc编译时的参数:
预处理 -E
编译 -S
汇编 -C
指定输出名 -o
带调试信息 -g
指定include目录-I
静态库:
gcc -c c文件名.c -o 汇编文件名.o :生成汇编文件
用ar工具生成静态库:ar rcs 库名.a 汇编文件
动态库:
汇编时 加上-fPIC 生成与位置无关的代码
gcc -shared 汇编文件 -o lib库名.so
链接器ld -l库名 -L 路径
动态库错误处理:
- 将动态库文件放进/lib下
- 在~/.bashrc文件增添 export LD_LIBRARY_PATH= “绝对路径”,然后 source ~/.bashrc
- vi ld.so.conf 在文件中添加路径,后在shell中 ldconfig -v
- 讲库文件放进/lib或/usr/lib下
格式:
目标:依赖 比如说 a.out:a.cpp, 目标文件a.out需要依赖a.cpp文件生成
参数 :-n 模拟运行
$(wildcard ./*.c) 表示当前文件下所有的c文件
$(patsubst ./%.c,./%.o,$(src)) 表示将第三个参数中对应位置的c文件路径,替换为汇编文件名称
$< 表示依次取出依赖文件
$@ 表示目标文件
$^ 表示取出所有依赖文件
ALL:目标文件
clean 下的-rm前加-在于没有该文件也不会报错
.PHONY 作用在于文件中有下列重名的文件,也能执行
标准示例:
src=$(wildcard ./*.c)
obj=$(patsubst ./%.c,./%.o,$(src))
tar=$(pathsubst ./%.c,./%.out,$(src))
all:$(tar)
para=-Wall -g
thread = -lpthread
$(tar):%.out:%.c
g++ $< -o $@ $(para) $(thread)
clean:
-rm -rf $(tar)
.PHONY:clean all
gdb 可执行文件:要求在生成时带 -g 参数
l 1 :查看源程序
r/run: 运行调试,可以快速查出段错误的位置
n: 下一个语句
s: 进入函数下一步
continue:继续执行后续命令
finish:结束当前函数调用
b 行号:打断点
p 变量名: 输出变量名值
ptype 变量名:查看变量类型
bt: 列出存活的栈帧号
info b:查询断点信息
delete 序号:去除序号断点
frame 1:切换到栈帧编号为1 的栈帧
display 变量名: 设置跟踪变量,后接变量名
undisplay 跟踪变量号: 取消跟踪,后接跟踪号
quit: 退出调试