嵌入式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
    命令

Makefile自动变量

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 嵌入式Linux学习笔记是一份关于嵌入式Linux系统的学习资料,主要介绍了嵌入式Linux系统的基础知识、开发环境搭建、应用程序开发、驱动程序开发等方面的内容。通过学习这份笔记,可以帮助读者了解嵌入式Linux系统的原理和应用,提高嵌入式Linux系统的开发能力。 ### 回答2: 嵌入式Linux嵌入式系统中常见的操作系统之一,它具有开放源代码、灵活性高、可定制性强等优势。学习嵌入式Linux对于想要从事嵌入式系统开发的人来说非常必要。 首先,了解Linux的基本知识是学习嵌入式Linux的前提。嵌入式Linux跟普通的Linux有很大的相似之处,因此学习Linux的基本命令、文件系统、进程管理等内容相当重要。 其次,学习如何在嵌入式设备上移植Linux嵌入式Linux学习的重点。在这个过程中,需要了解交叉编译的过程,掌握如何配置内核启动流程、驱动程序、应用程序等。 此外,还需要学习如何构建、调试和维护嵌入式Linux系统。构建过程包括选择适合的构建工具链和构建系统;调试过程包括硬件调试和软件调试;维护过程包括升级、维修和优化。 最后, 熟悉一些嵌入式系统硬件及其驱动开发,比如I2C、SPI、UART等外设,嵌入式设备的相应芯片的驱动框架等等。 总之,学习嵌入式Linux需要深入理解Linux操作系统和硬件架构,掌握交叉编译、移植、构建、调试和维护等技能。同时,也需要有一定的硬件知识和嵌入式系统开发经验。对于初学者,建议先从基础知识入手,逐步深入学习。对于有经验的开发者,要不断更新自己的知识,学习新技术和工具,保持对行业的敏感度。 ### 回答3: 嵌入式linux是一个应用范围广泛的操作系统,它的学习对于从事嵌入式系统开发的工程师来说至关重要。本文将从以下几个方面介绍嵌入式linux学习笔记和心得体会。 一、基础知识的学习学习嵌入式linux前,需要掌握基础的嵌入式系统知识和系统编程基础。这是因为嵌入式linux是建立在这些基础知识之上的。同时需要了解linux的基本概念、配置管理和文件系统。 二、linux内核的学习 学习嵌入式linux的关键是学习linux内核的构架、原理和实现。内核的学习需要从内核的启动、中断处理、进程调度、内存管理、驱动程序等多方面深入学习。在学习中可以通过分析内核代码,学习内核的实现机制。 三、驱动编写的学习 嵌入式linux是基于驱动的,因此驱动程序的编写是学习的重点。学习驱动程序需要了解硬件的基本原理和驱动程序的编写方法。需要学习linux的驱动程序框架和模块机制,以及设备文件、字符设备、块设备等领域的驱动程序的编写。 四、工具的掌握 学习嵌入式linux需要掌握相关的开发工具,如交叉编译器、调试器、模拟器等。交叉编译器是用于生成可在目标平台上运行的应用程序的工具。调试器是用于调试目标平台上运行的应用程序的工具。模拟器则是用于模拟目标平台硬件运行环境的工具。 五、实践应用的练习 学习嵌入式linux需要进行实践应用的练习。可以通过编写应用程序、驱动程序和内核模块等方式,实践应用嵌入式linux开发技术。 综上所述,学习嵌入式linux是一个长久的过程,需要不断地努力和实践。要掌握嵌入式linux的开发技能,需要从基础知识开始学习,不断深入,同时要加强实践应用的练习。只有通过不断的学习和实践,才能真正掌握嵌入式linux的开发技术,成为一名优秀的嵌入式系统工程师。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值