嵌入式Linux学习笔记
硬件环境
CPU:I.MX6UL
开发平台:Ubuntu-Linux
开发板:正点原子LinuxMini板
注:参考资料来源于正点原子LInux开发资料
虚拟机概念
虚拟机:相当于将你的电脑的分离出部分资源虚拟出另一台电脑。
Ubuntu:可以运行Linux的操作系统
虚拟机及Ubuntu安装步骤
太长了,详情建议百度或者查看正点原子Linux驱动指南
Ubuntu系统入门
Shell基本操作
Shell格式:command -options [argument]
第一个为命令名称
第二个为命令选项
第三个为命令参数
ls:打印当前目录下的所有文件和文件夹
ls -l:打印当前目录下所有文件和文件夹的详细信息
ls /usr:“/usr”为路径,打印当前路径的所有文件和文件夹
ifconfig:查看网卡信息
常用的Shell命令
1.目录信息查看命令 ls
主要参数:
-a:显示所有文件及子目录,包括隐藏文件
-I:显示文件的详细信息,比如文件的心态,权限,所有者,大小等信息
-t:将文件按照创建时间排序列出
-A:和-a一样,但是不列出隐藏文件
-R:递归列出所有文件,包括子目录中的文件
Shell命令里面的参数是可以组合用的,比如-al。
2.目录切换命令cd
想要在Shell中切换到其他的目录,使用的命令是cd,命令格式如下
cd [路径]
/:进入根目录
…:进入上级目录
~:切换当前用户目录
3.当前路径显示命令pwd
4.系统信息查看命令uname
uname [选项]
-r:列出当前系统的具体内核版本号
-s:列出系统内核名称
-o:列出系统信息
5.清屏 clear
清除终端上所有内容
6.切换用户执行身份命令 sudo
sudo [选项] [命令]
选项主要参数如下:
-h 显示帮助信息。
-l 列出当前用户可执行与不可执行的命令
-p 改变询问密码的提示符。
7.切换用户命令 su
su [选项] [用户名]
常用选项参数如下:
-c –command 执行指定的命令,执行完毕以后恢复原用户身份。
-login 改变用户身份,同时改变工作目录和 PATH 环境变量。
-m 改变用户身份的时候不改变环境变量
-h 显示帮助信息
8.显示和配置网络属性命令 ifconfig
ifconfig interface options | address
主要参数如下:
interface 网络接口名称,比如 eth0 等。
up 开启网络设备。
down 关闭网络设备。
add IP 地址,设置网络 IP 地址。
netmask add 子网掩码。
9.软件安装命令install
install [选项]… [-T] 源文件 目标文件
或:install [选项]… 源文件… 目录
或:install [选项]… -t 目录 源文件…
或:install [选项]… -d 目录…
10.更新本地数据库
如果想查看本地哪些软件可以更新的话可以使用如下命令:
sudo apt-get update
11.检测依赖关系
有时候本地某些软件可能存在依赖关系,所谓依赖关系就是 A 软件依赖于 B 软件。通过如下命令可以查看依赖关系,如果存在依赖关系的话 APT 会提出解决方案:
sudo apt-get check
12.软件自动下载并安装
sudo apt-get install package-name
13.软件更新
sudo apt-get upgrade package-name
14.卸载软件
sudo apt-get remove package-name
VI/VIM编辑器的使用
安装指令:sudo apt-get install vim
打开文本:vim test.txt
基础设置
VI编辑器默认TAB键为8空格,改4空格方法为,命令用VI打开/etc/vim/vimrc,在文件末尾输入set ts=4
VIM 编辑器默认是不显示行号的,不显示行号不利于代码查看,我们设置 VIM 编辑器显
示行号,同样是通过在文件/etc/vim/vimrc 中添加代码来实现,在文件最后面加入下面一行代码set nu
VIM 编辑器有 3 种工作模式:输入模式、指令
模式和底行模式,通过切换不同的模式可以完成不同的功能。
模式指令:
i 在当前光标所在字符的前面,转为输入模式。
I 在当前光标所在行的行首转换为输入模式。
a 在当前光标所在字符的后面,转为输入模式。
A 在光标所在行的行尾,转换为输入模式。
o 在当前光标所在行的下方,新建一行,并转为输入模式。
O 在当前光标所在行的上方,新建一行,并转为输入模式。
s 删除光标所在字符。
r 替换光标处字符。
Ctrl+S为暂停终端
Ctrl+Q 为重新打开终端
按下Esc键为切换到指令模式,常用指令如下:
1、移动光标指令:
h(或左方向键) 光标左移一个字符。
l(或右方向键) 光标右移一个字符。
j(或下方向键) 光标下移一行。
k(或上方向键) 光标上移一行。
nG 光标移动到第 n 行首。
n+ 光标下移 n 行。
n- 光标上移 n 行。
2、屏幕翻滚指令
Ctrl+f 屏幕向下翻一页,相当于下一页。
Ctrl+b 屏幕向上翻一页,相当于上一页。
3、复制、删除和粘贴指令
cc 删除整行,并且修改整行内容。
dd 删除该行,不提供修改功能。
ndd 删除当前行向下 n 行。
x 删除光标所在的字符。
X 删除光标前面的一个字符。
nyy 复制当前行及其下面 n 行。
p 粘贴最近复制的内容。
想要保存修改文件必须进入到底行模式,进入方式为先按下Esc进入指令模式,然后输入“:”即可,底行模式指令如下:
x 保存当前文档并且退出。
q 退出。
w 保存文档。 q! 退出 VI/VIM,不保存文档。
我们可以在:后面输入wq保存并退出,也可以输入“/”进入底行模式,在“/”底行模式下我们可以在文本中搜索指定的内容
文件操作
1.创建文件:touch [参数] [文件名]
参数如下:
-a 只更改存取时间。
-c 不建立任何文件。
-d<日期> 使用指定的日期,而并非现在日期。
-t<时间> 使用指定的时间,而并非现在时间。
2.文件夹创建:mkdir [参数] [文件夹名目录名]
参数如下:
-p 如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录。
3.文件及目录删除:rm [参数] [目的文件或文件夹目录名]
参数如下:
-d 直接把要删除的目录的硬连接数据删成 0,删除该目录。
-f 强制删除文件和文件夹(目录)。 -i 删除文件或者文件夹(目录)之前先询问用户。
-r 递归删除,指定文件夹(目录)下的所有文件和子文件夹全部删除掉。
-v 显示删除过程。
4.文件夹(目录)删除命令:rmdir [参数] [文件夹(目录)]
参数如下:
-p 删除指定的文件夹(目录)以后,若上层文件夹(目录)为空文件夹(目录)的话就将其一起
删除。
Linux C编程
基础设置
VI编辑器默认TAB键为8空格,改4空格方法为,命令用VI打开/etc/vim/vimrc,在文件末尾输入set ts=4
VIM 编辑器默认是不显示行号的,不显示行号不利于代码查看,我们设置 VIM 编辑器显
示行号,同样是通过在文件/etc/vim/vimrc 中添加代码来实现,在文件最后面加入下面一行代码set nu
GCC编译器
命令格式如下:gcc [选项] [文件名字]
选项如下:
-c:只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。
-o:<输出文件名>用来指定编译结束以后的输出文件名,如果不使用这个选项的话 GCC 默认编译出来的可执行文件名字为 a.out。
-g:添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。
-O:对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。
-O2:比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。
编译流程
GCC 编译器的编译流程是:预处理、编译、汇编和链接。
预处理就是展开所有的头文件、替换程序中的宏、解析条件编译并添加到文件中。
编译是将经过预编译处理的代码编译成汇编代码,也就是我们常说的程序编译。
汇编就是将汇编语言文件编译成二进制目标文件。
链接就是将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件,链接的时候还会涉及到静态库和动态库等问题。上一小节演示的例程都只有一个文件,而且文件非常简单,因此可以直接使用 gcc 命令生成可执行文件,并没有先将 c 文件编译成.o 文件,然后再链接在一起。
Makefile基础
概念
若没有Makefile时,当编译文件达几百上千个文件时我们需要先依次将每个文件按照GCC命令编译一遍,然后再进行链接,这样的工程量直接能累死人,因此产生了Makefile,你可以在Makefile中描述了哪些文件需要编译、哪些文件做了修改需要重新编译,哪些文件没做修改不需重复编译即可。这样我们在编译时只需一个make指令就能完成工程下所有文件的编译了。
语法规则
目标…… : 依赖文件集合……
命令 1
命令 2
……
Makefile中,注释用“#”
示例指令解析:
gcc -c main.c
gcc -c input.c
gcc -c calcu.c
上面三条为只编译不链接
gcc main.o input.o calcu.o -o main
将所有的.o文件链接成为可执行文件main。
但是上面的也仅限于指定的文件编译和链接,不能去判断哪些已经被编译不需要被编译了,哪些做了修改需要重新编译,因此需要Makefile来描述。
Makefile实例分析:
注意:空格的地方一定要用TAB键不要空格键,此为Makefile的语法规定
在当前路径打开终端输入make指令编译,若出现以下错误则进行两处检查:
1、Makefile 中命令缩进没有使用 TAB 键!
2、VI/VIM 编辑器使用空格代替了 TAB 键,修改文件/etc/vim/vimrc,在文件最后面加上代码:set noexpandtab
Makefile执行过程
1、make 命令会在当前目录下查找以 Makefile(makefile 其实也可以)命名的文件。
2、当找到 Makefile 文件以后就会按照 Makefile 中定义的规则去编译生成最终的目标文件。
3、当发现目标文件不存在,或者目标所依赖的文件比目标文件新(也就是最后修改时间比
目标文件晚)的话就会执行后面的命令来更新目标。
Makefile变量
如:
引用变量:$(变量名)
一些赋值操作
使用“=”在给变量的赋值的时候,不一定要用已经定义好的值,也可以使用后面定义的值
赋值符“:=”为固定值,不会因为其他地方间接被修改已赋值的值
“?=”,如果已经被赋值就不进行操作,否则就在此处赋值
变量追加“+=”,末尾继续添加新的字符串
Makefile模式规则
从上图我们发现,项目涉及到的.c文件,每一个都需要写一个对应的规则,若涉及到的.c文件有几百上千个,照这种写法,我们要写几百上千个对应的规则,我们需要一个便捷的方法去实现,这就是模式规则
当“%”出现在目标中的时候,目标中“%”所代表的值决定了依赖中的“%”值,如:
%.o : %.c
命令