清单
清单
嵌入式Linux操作系统 期末复习知识清单
复习指南说明:本文档根据思维导图、期末重点和题型总结而成,涵盖5章内容,突出高频考点和典型题目。建议重点掌握Shell编程、Linux命令和嵌入式开发工具。
第1章 嵌入式Linux操作系统简介
核心概念(常见考点:选择、填空)
1.1 嵌入式系统定义与特征
- 定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统
- 三个基本要素:嵌入性、专用性、计算机系统性
- 高频题型:简答"什么是嵌入式系统?",填空三个要素
1.2 嵌入式Linux操作系统的优势
✓ 支持多种体系结构
✓ 多任务、内核稳定、可定制、源代码开放
✓ 强大的网络支持功能
✓ 支持多文件系统(FAT32、EXT2/3、ROMFS、JFFS)
✓ 驱动丰富,支持大量外设
✓ 具备完整工具链(gcc、make、gdb)
典型考题:列举5个或以上优势
1.3 Linux系统的组成(重点)
| 组成部分 | 说明 |
|---|---|
| Linux内核 | 系统核心,管理资源 |
| Linux Shell | 命令解释器,用户与内核交互 |
| Linux应用系统 | 各种应用程序 |
| Linux文件系统 | 存储和组织文件 |
1.4 Linux内核版本与发行版本
版本号格式:r.x.y
-
r:主版本号(0-9),代表较大改动
-
x:次版本号(0-99),表示功能性改动
- 偶数 = 稳定树;奇数 = 开发树
-
y:末版本号(0-99),表示BUG修复
例题:2.4.20是什么版本?→ 稳定内核版本(x=4为偶数)
1.5 Linux内核的五个子系统(★重点题型)
- 进程调度(Process Scheduling)
- 内存管理(Memory Management)
- 虚拟文件系统(Virtual File System)
- 网络接口(Network Interface)
- 进程间通信(Inter-Process Communication, IPC)
考法:简答、选择、填空题常出现
1.6 Linux内核源码结构(常考:简答、对应关系)
| 目录 | 功能说明 |
|---|---|
| /arch | 体系结构相关代码 |
| /mm | 内存管理代码 |
| /init | 内核初始化代码(main.c、version.c) |
| /fs | 所有文件系统代码 |
| /ipc | 进程间通信代码 |
| /kernel | 内核管理核心代码 |
| /include | 建立内核时需要的头文件 |
| /net | 网络相关代码 |
| /lib | 库代码 |
1.7 国产操作系统(选择、填空常考)
- 深度Linux(deepin)
- 安超OS
- 优麒麟(UbuntuKylin)
- 中标麒麟(NeoKylin)
- 红旗Linux
- AliOS
- openEuler(华为)
- 鸿蒙OS(Harmony OS) ←最新、最常考
第2章 Linux常用命令(20-30分重点)
2.1 Shell基础知识(选择题常考)
- # = 超级用户root的提示符
- $ = 普通用户的提示符
2.2 用户系统相关命令
su – 用户切换命令
su root # 切换到root用户
su - user1 # 切换到user1(加载环境变量)
磁盘相关命令(★高频考点)
fdisk -l # 查看磁盘分区信息
du # 查看目录/文件大小
df # 查看文件系统磁盘使用情况
free # 查看内存使用情况
mount – 磁盘挂载命令(★考点)
格式:mount [-t vfstype] [-o options] device dir
常用参数解析:
| 参数 | 说明 |
|---|---|
| -t vfstype | 指定文件系统类型 |
| -o options | 挂接方式选项 |
| device | 要挂接的设备 |
| dir | 挂接点 |
常用vfstype:
- iso9660(光盘)
- msdos(DOS FAT16)
- vfat(Windows FAT32)
- ntfs(Windows NT)
- nfs(网络文件系统)
- smbfs(Windows网络共享)
常用options:
- loop(把文件当硬盘挂接)
- ro(只读)
- rw(读写)
- iocharset=cp936(解决中文乱码)
典型考题:U盘挂载步骤
# 1. 查找U盘设备名
fdisk -l # 找到 /dev/sdb 等
# 2. 创建挂载点
mkdir -p /mnt/usb
# 3. 挂载U盘
mount /dev/sdb /mnt/usb
# 4. 如果有乱码,加字符集参数
mount /dev/sdb /mnt/usb -t vfat -o iocharset=cp936
# 5. 卸载
umount /mnt/usb
ssh远程登录命令(★考点)
基础语法:ssh [-p port_number] username@hostname
| 参数 | 说明 |
|---|---|
| -p port_number | 指定端口(默认22) |
| username | 登录用户名 |
| hostname | 服务器IP或主机名 |
例题:
# 默认端口登录
ssh root@192.168.1.100
# 指定非默认端口
ssh -p 2222 test@47.98.1.1
# 主机名登录
ssh -p 8888 admin@server.example.com
# 等效写法
ssh -l root 192.168.1.100 # 与第一个等效
2.3 文件目录相关命令(重点)
基本命令速查表
| 命令 | 功能说明 | 常用选项 |
|---|---|---|
| ls | 列表显示目录 | -l(详细)、-a(隐藏)、-d(仅目录) |
| cd | 改变工作目录 | cd / 、cd .. 、cd ~ |
| mkdir | 创建目录 | -p(多层)、-m(权限) |
| touch | 创建文件 | (无主要选项) |
| file | 判断文件类型 | (无主要选项) |
| cat | 显示文件内容 | -n(编号)、-b(非空编号) |
| cp | 复制文件/目录 | -i(询问)、-r(递归)、-a(保留元数据) |
| mv | 移动/重命名 | -i(询问覆盖) |
| rm | 删除文件 | -f(强制)、-r(递归) |
| rmdir | 删除空目录 | -p(删除多层) |
| head/tail | 查看文件头/尾 | -n(行数)、-f(跟踪) |
| ln | 创建链接 | -s(软链接)、无则硬链接 |
chmod – 改变文件权限(★考点)
文字表示法:chmod [who][+|-|=][mode] file
who:u(owner)、g(group)、o(others)、a(all)
mode:r(读4)、w(写2)、x(执行1)
数字表示法:chmod xxx file(3位数字分别代表owner、group、others)
例题:
# 只有所有者可读写执行,group可读,others无权限
chmod 740 file
# 等效的文字表示
chmod u=rwx,g=r,o= file
# 给所有者加执行权
chmod u+x file
# 去掉其他人的所有权限
chmod o= file
特殊例题:根据 -rw-r--r-- 回答权限问题
- 第1位:
-表示普通文件 - 后9位:owner(rw-)、group(r–)、others(r–)
- 数字表示:644
grep – 文本搜索(★高频)
grep "pattern" file # 在文件中搜索模式
grep -n "pattern" file # 显示行号
grep -i "pattern" file # 不区分大小写
grep -r "pattern" /dir # 递归搜索目录
find – 文件查找(★考点)
find /path -name "*.c" # 按名字查找
find /path -type f -name "*.c" # 按类型查找(f=文件,d=目录)
find /path -name "*.c" -exec rm {} \; # 查找并删除
例题集锦
例1:执行 ls -l 显示 -rw-r--r-- 1 chris chris 207 Jul 20 11:58 file
- (1)
ls -l的功能:详细列表显示目录内容 - (2) 文件类型:普通文件(-)
- (3) user chris的权限:读写(rw-)
- (4) 新加用户Tom的权限:读(r–),属于others
- (5) 如何使所有用户都可读写执行:
chmod 777 file 或chmod a=rwx file
例2:复制文件操作
# 将source目录中所有文件复制到target,保留元数据,覆盖前询问
cp -i -r /home/user/source/* /home/user/target
例3:硬链接和软链接区别
ln file1 file2 # 硬链接:inode号相同
ln -s file1 file2 # 软链接:inode号不同
# 查看inode
ls -i file
# 区别:
# - 硬链接:修改文件同步变化,删除原文件,链接仍有效
# - 软链接:修改文件同步变化,如果删除原文件,链接断开
第3章 Shell编程(24分重点:6分选择+19分编程)
3.1 Shell基础(选择题常考)
Shell是什么
- Shell:命令解释器,用户与内核的接口
- 分类:图形界面Shell、命令行式Shell
常用Shell版本
- sh:原始shell
- bash:GNU shell(最常用)
- csh、ksh:其他版本
bash的优点(★考点)
- 补全命令(Tab键)
- 通配符(*、?)
- 历史命令(↑↓)
- 别名
- 输入/输出重定向
- 管道(|)
- 可定制提示符
3.2 Shell编程基础(重点内容)
3.2.1 脚本基本结构
#!/bin/bash # 第1行:指定解释器(必须)
# 注释 # 注释行以#开头
# 脚本内容
echo "Hello World"
脚本执行的4种方式
# 方式1:没有执行权限时
bash script.sh
# 方式2:设置执行权限后直接运行(PATH环境变量中)
chmod +x script.sh
./script.sh
# 方式3:绝对路径执行
/path/to/script.sh
# 方式4:在当前Shell中执行(变量可传递到父Shell)
. script.sh
source script.sh
3.2.2 变量定义与赋值(★考点)
规则:
- 变量名以字母或下划线开头
- 变量名大小写敏感
- 定义时不加$,引用时加$
- 等号两边不能有空格
- 含空格的值用双引号或单引号括起
# 正确方式
var=10 # 赋值
echo $var # 引用
var="hello world" # 含空格的值
# 数字运算
var=$[10+5] # 方式1
let 'var=10+5' # 方式2
var=`expr 10 + 5` # 方式3(注意+两边有空格)
# 只读变量
readonly var
# 环境变量
export PATH=$PATH:/new/path
位置参数(★高频考点)
| 参数 | 含义 |
|---|---|
| $0 | 脚本名称 |
| undefined… | 第1、2…位置参数 |
| $# | 位置参数总数 |
| $* | 所有位置参数(整体) |
| $@ | 所有位置参数(逐个) |
| shift | 左移位置参数 |
例题:脚本接收3个参数
#!/bin/bash
if [ $# -ne 3 ]; then
echo "Usage: $0 arg1 arg2 arg3"
exit 1
fi
echo "参数1: $1, 参数2: $2, 参数3: $3"
3.2.3 特殊字符与引用
| 符号 | 说明 | 示例 |
|---|---|---|
| " " | 双引号 | 消除$、`、!、\的含义,其他特殊字符失效 |
| ‘ ‘ | 单引号 | 保留所有字符的原意 |
|
反引号 | 执行命令并返回结果 |
| \ | 反斜线 | 转义,也可续行 |
| {} | 大括号 | 标识变量:${var}nd |
例题:
# 双引号可以解析$变量
MSG="Hello $USER"
echo "$MSG" # 输出:Hello tom
# 单引号不解析$变量
MSG='Hello $USER'
echo "$MSG" # 输出:Hello $USER
# 反引号执行命令
result=`date`
result=$(date) # 推荐写法
echo $result
# 大括号标识变量边界
num=2
echo "This is the ${num}nd day" # 输出:This is the 2nd day
3.3 流程控制(★重点:题目占分最多)
3.3.1 测试命令 test 或 [ ]
格式:test condition 或 [ condition ](注意中括号两侧要有空格)
数值运算操作符(用于比较数值):
| 操作符 | 说明 |
|---|---|
| -eq | 等于 |
| -ne | 不等于 |
| -lt | 小于 |
| -le | 小于等于 |
| -gt | 大于 |
| -ge | 大于等于 |
字符串操作符:
| 操作符 | 说明 |
|---|---|
| = | 字符串相等 |
| != | 字符串不相等 |
| -z | 字符串长度为0 |
| -n | 字符串长度不为0 |
文件操作符(★常考):
| 操作符 | 说明 |
|---|---|
| -d | 是否为目录 |
| -f | 是否为普通文件 |
| -l | 是否为符号链接 |
| -r | 是否可读 |
| -w | 是否可写 |
| -x | 是否可执行 |
| -e | 文件是否存在 |
| -z | 文件大小是否为0 |
逻辑操作符:
| 操作符 | 说明 | 示例 |
|---|---|---|
| && | 逻辑与 | [ -d /etc ] && echo yes || echo no |
| || | 逻辑或 | 同上 |
| ! | 逻辑非 | [ ! -e file ] |
例题:
# 判断/etc是否为目录
[ -d /etc ] && echo "是目录" || echo "不是目录"
# 判断用户是否对/etc有写权限
[ -w /etc ] && echo "可写" || echo "不可写"
# 判断文件是否存在且可读
[ -e /etc/passwd ] && [ -r /etc/passwd ] && echo "存在且可读"
3.3.2 if 条件语句(★考点)
单分支:
if [ condition ]; then
statements
fi
双分支:
if [ condition ]; then
statements1
else
statements2
fi
多分支:
if [ condition1 ]; then
statements1
elif [ condition2 ]; then
statements2
else
statements3
fi
考试示例:判断文件是否为0
#!/bin/bash
if [ ! -f "$1" ] || [ -z "$1" ]; then
rm -f "$1"
echo "File deleted"
else
cat "$1"
fi
3.3.3 case 语句
case string in
exp1)
commands1
;;
exp2)
commands2
;;
*)
default_commands
;;
esac
3.3.4 for 循环(★重点)
# 形式1:for循环遍历列表
for item in list; do
commands
done
# 形式2:传统C风格for循环
for ((i=1; i<=10; i++)); do
commands
done
# 常见用途
for file in /var/*; do
echo "Processing $file"
done
for i in `seq 1 30`; do
username="std0${i}"
# 处理用户
done
3.3.5 while 和 until 循环
# while:条件为真时循环
while [ condition ]; do
commands
done
# until:条件为真时退出循环
until [ condition ]; do
commands
done
3.3.6 break 和 continue
for i in `seq 1 10`; do
if [ $i -eq 5 ]; then
continue # 跳过当前迭代
fi
if [ $i -eq 8 ]; then
break # 退出循环
fi
echo $i
done
3.3.7 函数
# 定义函数
function_name() {
commands
return value
}
# 调用函数
function_name arg1 arg2
3.4 Shell编程典型题目(★考试重点)
题目1:判断字符设备文件并复制到/dev
#!/bin/bash
if [ ! -c "$1" ]; then
echo "Not a character device"
exit 1
fi
cp "$1" /dev/
echo "File copied to /dev"
知识点:-c 表示字符设备文件
题目2:计算1~n的和
#!/bin/bash
n=$1
sum=0
for ((i=1; i<=n; i++)); do
sum=$[sum+i]
done
echo "Sum from 1 to $n is: $sum"
题目3:遍历目录并统计普通文件
#!/bin/bash
cd /var
# 向每个文件/目录问好
for FILE in /var/*; do
echo "Hello, $(basename $FILE)"
done
# 统计普通文件数量
file_count=$(find /var -type f | wc -l)
echo "Total regular files: $file_count"
知识点:find + type f + wc -l 的组合使用
题目4:创建/删除批量用户
# ===== 创建用户脚本 create_users.sh =====
#!/bin/bash
for i in `seq 1 40`; do
username="user$i"
useradd -m -s /bin/bash "$username"
echo "User $username created"
done
# ===== 删除用户脚本 delete_users.sh =====
#!/bin/bash
for i in `seq 1 40`; do
username="user$i"
userdel -r "$username"
echo "User $username deleted"
done
知识点:useradd -m -s选项,seq命令的使用
题目5:处理位置参数的脚本
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <file>"
exit 1
fi
if [ -f "$1" ] && [ ! -z "$1" ]; then
cat "$1"
else
rm -f "$1"
echo "File deleted"
fi
第4章 嵌入式Linux开发环境及工具软件(21分)
4.1 嵌入式系统移植流程(★理解题常考)
- 建立交叉编译环境:在宿主机上编译目标机程序
- 移植U-boot:启动引导程序
- 移植操作系统内核:系统核心
- 制作根文件系统:存储文件的结构
- 配置目标平台:网络、存储、USB等
- 编译程序:生成目标可执行文件
- 烧写程序:将程序写入目标设备
4.2 交叉编译(★常考概念)
定义:在一个平台上编译另一个平台上可运行的程序
需要原因:
- 目标平台资源有限
- 提高开发效率
- 增强代码可移植性
常用工具链:
- arm-linux-gcc:ARM平台交叉编译器
- armv4l-unknown-linux-gcc:ARM v4架构编译器
4.3 vi/vim 编辑器(★选择、填空)
三种工作模式
| 模式 | 功能 | 进入方式 | 退出方式 |
|---|---|---|---|
| 命令模式 | 光标移动、删除、复制等 | 启动vi | ESC |
| 输入模式 | 输入文本 | i、a、o等 | ESC |
| 末行模式 | 查找、替换、保存等 | :(来自命令模式) | ESC |
常用命令
| 命令 | 功能 |
|---|---|
| i/a/o | 进入输入模式 |
| h/j/k/l | 左下上右移动 |
| dd | 删除当前行 |
| yy | 复制当前行 |
| p | 粘贴 |
| /pattern | 查找 |
| :w | 保存 |
| :q | 退出 |
| :wq | 保存并退出 |
| :q! | 强制退出(不保存) |
| :set nu | 显示行号 |
4.4 gcc 编译器(★重点:占分最多)
编译的四个阶段
# 1. 预处理 (Preprocessing) -E
gcc -E hello.c -o hello.i # 处理#include、#define等
# 2. 编译 (Compiling) -S
gcc -S hello.i -o hello.s # 生成汇编代码
# 3. 汇编 (Assembling) -c
gcc -c hello.s -o hello.o # 生成目标文件
# 4. 链接 (Linking) -o
gcc hello.o -o hello # 生成可执行文件
# 一步到位
gcc hello.c -o hello
gcc常用选项(★考题)
| 选项 | 功能 | 例子 |
|---|---|---|
| -o file | 指定输出文件名 | gcc hello.c -o hello |
| -c | 只编译不链接,生成.o文件 | gcc -c hello.c |
| -I dirname | 添加头文件搜索路径 | gcc -I /usr/include hello.c |
| -L dirname | 添加库文件搜索路径 | gcc -L /usr/lib hello.c |
| -l libname | 链接库文件 | gcc hello.c -lm(链接math库) |
| -g | 生成调试信息(用于gdb) | gcc -g hello.c -o hello |
| -O | 优化编译 | gcc -O2 hello.c |
| -Wall | 显示警告信息 | gcc -Wall hello.c |
| -static | 静态链接 | gcc -static hello.c |
重要:数学库 libm 的链接
# math.h 中的函数需要链接 -lm
gcc hello.c -lm -o hello
典型题:解释 -o、-c、-I、-L、-l 的功能
- -o: 指定输出文件名
- -c: 只预处理、编译、汇编,不链接
- -I: 在头文件搜索路径中添加目录
- -L: 在库文件搜索路径中添加目录
- -l: 链接库文件(省略lib前缀和.a/.so后缀)
GCC编译工作流程图
源文件(hello.c)
↓
[预处理] -E → hello.i (处理指令)
↓
[编译] -S → hello.s (汇编代码)
↓
[汇编] -c → hello.o (目标文件)
↓
[链接] -o → hello (可执行文件)
4.5 gdb 调试器(★常考)
前置条件:编译时必须加 -g 选项
启动方法
# 方法1:启动后加载程序
gdb
(gdb) file hello
# 方法2:直接启动并加载程序
gdb hello
常用命令
| 命令 | 简记 | 功能 |
|---|---|---|
| step | s | 单步执行,进入函数 |
| next | n | 单步执行,不进入函数 |
| list | l | 查看源代码 |
| print var | p var | 显示变量值 |
| break 行号 | b 行号 | 设置断点 |
| run | r | 运行程序 |
| continue | c | 继续执行 |
| quit | q | 退出gdb |
调试示例:
gcc -g hello.c -o hello
gdb hello
(gdb) break main
(gdb) run
(gdb) next
(gdb) print var
(gdb) quit
4.6 make 工程管理器(★重点:常考题)
makefile 的三要素(★必考)
- 目标体 (target) :要生成的文件(通常是可执行文件或目标文件)
- 依赖文件 (dependency_file) :目标文件所依赖的文件
- 执行命令 (command) :生成目标文件所需的命令 (必须以TAB键开头)
makefile 语法规则
target: dependency_file1 dependency_file2 ...
command1
command2
...
注意:command 行必须以TAB键开头,不能用空格
makefile 实例(★常考题)
背景:有文件 hello.c、message.c、head.h,要生成可执行文件 hello
依赖关系分析:
hello → hello.o, message.o
hello.o → hello.c, head.h
message.o → message.c
makefile 内容:
hello: hello.o message.o
gcc -o hello hello.o message.o
hello.o: hello.c head.h
gcc -c hello.c
message.o: message.c
gcc -c message.c
clean:
rm -f hello *.o
all.tar: hello.c message.c head.h makefile
tar cvf all.tar hello.c message.c head.h makefile
make 命令的执行
# 生成第一个目标
make
# 生成指定目标
make hello
# 执行伪目标(清理)
make clean
# 指定配置文件
make -f mymakefile
# 生成all.tar
make all.tar
伪目标 (PHONY target)
.PHONY: clean all
clean:
rm -f *.o hello
all: hello
echo "Build complete"
第5章 嵌入式Linux的构建(构建、网络、NFS)
5.1 Bootloader技术(★基础概念题)
什么是Bootloader
- 启动引导程序,负责加载操作系统内核并引导系统启动
- 是系统启动的第一段程序代码
Bootloader的安装媒介
| 媒介 | 说明 |
|---|---|
| Nor Flash | 支持XIP(芯片内执行),程序可直接在Flash中运行 |
| Nand Flash | 不支持XIP,需要先加载到内存再执行 |
Bootloader的操作模式
- 启动加载模式:正常启动系统
- 下载模式:通过串口、网络等下载程序
常用Bootloader
- vivi:用于ARM嵌入式系统
- redboot:用于eCos系统
- U-boot:最广泛使用
5.2 根文件系统(★常考概念)
什么是根文件系统
- 特殊文件系统,内核启动时第一个挂载的文件系统
- 包含系统运行所需的各种程序和配置文件
根文件系统中的重要目录
| 目录 | 功能 |
|---|---|
| /bin, /sbin | 存放二进制可执行文件 |
| /usr/bin, /usr/sbin | 用户程序和系统管理程序 |
| /lib | 链接库文件(.so, .a) |
| /etc | 系统配置文件目录 |
| /etc/fstab | 文件系统挂载配置(启动自动装载) |
| /etc/inittab | 系统启动解析文件 |
| /etc/passwd | 用户口令文件 |
| /etc/shadow | 密码影子文件(root可读) |
| /etc/profile | 登录时执行的配置文件 |
| /dev | 设备文件 |
| /proc | 进程信息目录 |
| /sys | 系统信息目录 |
根文件系统类型
| 类型 | 说明 |
|---|---|
| JFFS2 | 针对Nand Flash的日志型文件系统 |
| YAFFS/YAFFS2 | 专为闪存优化的文件系统 |
| cramfs | 压缩只读文件系统 |
| Romfs | 只读文件系统 |
| RAMDISK | 基于内存的文件系统 |
5.3 BusyBox – 根文件系统构建工具(★重点)
特点:被称为"Linux工具里的瑞士军刀"
原理:
- /bin 目录下的所有命令(ls、cat等)都是指向 busybox 的符号链接
- 一个可执行文件提供多个命令功能
使用 BusyBox 构建根文件系统的步骤
# 1. 下载并解压源码
tar jxvf busybox-1.1.0.tar.bz2
cd busybox-1.1.0
# 2. 配置
make menuconfig
# 3. 编译
make
# 4. 安装(生成_install目录)
make install
# 5. 创建必要目录
mkdir -p _install/{dev,etc,lib,proc,sys}
# 6. 创建根文件系统映像
mkcramfs _install root.cramfs
生成文件说明:
-
_install/:根文件系统树 -
root.cramfs:打包后的根文件系统镜像
5.4 Linux内核配置与编译(★考点)
内核编译流程
# 1. 解压内核源码
tar --zxvf linux-2.4.18.tar.gz
cd linux-2.4.18
# 2. 修改Makefile(交叉编译配置)
# SUBARCH := arm # 指定目标体系结构
# CROSS_COMPILE := arm-linux- # 指定交叉编译器前缀
# 3. 配置内核
make menuconfig
# 4. 检查依赖性
make dep
# 5. 生成内核镜像
make zImage
# 生成文件位置:/arch/arm/boot/zImage
Linux内核的五个子系统(★重要复习点)
- 进程调度(Process Scheduling)
- 内存管理(Memory Management)
- 虚拟文件系统(Virtual File System)
- 网络接口(Network Interface)
- 进程间通信(IPC)
5.5 NFS 网络文件系统(★重点)
什么是NFS:分布式文件系统,采用C/S工作模式,基于RPC协议
NFS服务器配置
关键配置文件:/etc/exports
# /etc/exports 配置示例
/home/nfs_share *(rw,no_root_squash) # 允许所有主机读写
/home/nfs_share 192.168.1.*(rw) # 允许192.168.1.x网段读写
NFS客户端挂载
# 格式
mount -t nfs -o nolock server_ip:/export/path /local/mount_point
# 例子:从主机192.168.0.56共享的/dir目录挂载到/host
mount -t nfs -o nolock 192.168.0.56:/dir /host
5.6 嵌入式应用程序交叉编译与NFS调试(★实验常考)
开发流程
# 1. 在宿主机建立工作目录
mkdir /dir && cd /dir
# 2. 编写程序
vi hello.c
# 3. 编写Makefile(如需要)
vi Makefile
# 4. 交叉编译
arm-linux-gcc -o hello hello.c
# 5. 基于NFS的下载调试:
# (1) 宿主机启动NFS服务,配置/etc/exports
# (2) 目标机挂载NFS:mount -t nfs -o nolock 192.168.0.56:/dir /host
# (3) 进入目标机的/host目录,运行程序:./hello
5.7 网络配置(★常用命令)
# 配置IP地址
ifconfig eth0 192.168.1.245 netmask 255.255.255.0
# 测试网络连通性
ping -c 5 -i 0.6 192.168.1.245 # 每隔0.6秒ping一次,共5次
ping -c 5 www.qq.com
# 查看路由表
route
# 查看网络接口
ifconfig
期末考试题型分析与评分分布
考试总分:100分
| 题型 | 分值 | 考查内容 | 出题特点 |
|---|---|---|---|
| 一、选择题 | 17.5分 | Linux基础知识、概念 | 选择适当的命令、版本特征、概念理解 |
| 二、选择题 | 6分 | Shell编程基础 | 变量、位置参数、特殊字符 |
| 三、填空题 | 18分 | gcc选项、make命令、目录结构 | 每空1分,共18题 |
| 四、操作命令题 | 14分 | Linux常用命令 | 文件操作、权限管理、挂载等 |
| 五、Shell编程 | 19分 | 完整脚本设计 | 根据需求写脚本(最易失分) |
| 六、嵌入式系统题 | 12分 | 项目管理、开发流程 | makefile编写、交叉编译流程 |
各章考点权重
| 章节 | 重要程度 | 分值比例 | 备注 |
|---|---|---|---|
| 第1章 | ★★★ | 20-25% | 基础概念,小题多 |
| 第2章 | ★★★★ | 20-25% | 命令应用,实践性强 |
| 第3章 | ★★★★★ | 20-30% | Shell编程,分值最大 |
| 第4章 | ★★★★ | 20-25% | gcc、make重点 |
| 第5章 | ★★ | 10-15% | 理论为主 |
常见易错点总结
Shell编程常错
- 等号两边有空格:
var = 10 ❌ →var=10✓ - 中括号缺空格:
[-d /etc] ❌ →[ -d /etc ]✓ - 位置参数混淆:$* 和$@ 的区别容易混
- 命令输出赋值:使用反引号或$()
- 数字运算方式:混淆$[ ]、let、expr的用法
gcc编译常错
- 忘记-lm:包含math.h的代码编译失败
- -L和-l的顺序:应先-L后-l
- -o位置错误:应放在最后
makefile常错
- command行缺TAB:用空格替代导致make失败
- 依赖关系错误:导致编译顺序混乱
- 伪目标定义遗漏:.PHONY声明可能被遗忘
权限表示常错
- 记不清各位含义:owner-group-others
- 八进制计算错误:r=4, w=2, x=1
复习建议与快速查看清单
复习重点(必背)
- 嵌入式系统的三要素:嵌入性、专用性、计算机系统性
- Linux内核五个子系统:进程调度、内存管理、虚拟文件系统、网络接口、IPC
- Linux系统四个组成部分:内核、Shell、应用系统、文件系统
- gcc四个编译阶段:预处理、编译、汇编、链接
- Shell变量赋值规则:等号两边不能有空格
- makefile三要素:target、dependency、command(TAB键开头)
- vi三种模式:命令模式、输入模式、末行模式
- chmod权限表示:r=4, w=2, x=1,owner-group-others
- 文件操作符:-d(目录)、-f(文件)、-c(字符设备)、-l(链接)
- mount挂载参数:-t(文件系统)、-o(挂接方式)、iocharset(字符集)
高频考题预测
| 题型 | 预测题目 |
|---|---|
| 简答(5-8分) | 嵌入式系统定义、Linux系统组成、gcc编译过程 |
| 选择(4-6题) | Linux版本、Shell特性、gcc选项、命令用途 |
| 填空(8-10题) | gcc -o -c -I -L -l 选项说明、目录结构、权限数字 |
| 命令题(6-8分) | 文件权限修改、U盘挂载步骤、SSH登录 |
| 编程题(15-20分) | 批量创建/删除用户、文件处理、目录遍历统计 |
快速参考表
Linux命令速查
| 场景 | 命令 |
|---|---|
| 查看目录详情 | ls -l |
| 创建多层目录 | mkdir -p dir1/dir2/dir3 |
| 复制目录及内容 | cp -r dir1 dir2 |
| 递归删除目录 | rm -r dir |
| 查看文件权限 | ls -l file |
| 修改权限为755 | chmod 755 file |
| 搜索文件内容 | grep "pattern" file |
| 查找文件 | find /path -name "*.c" |
| 查找并删除 | find /path -name "*.c" -exec rm {} \; |
| 挂载设备 | mount /dev/sdb /mnt/usb |
| 卸载设备 | umount /mnt/usb |
| 远程登录 | ssh -p 22 user@host |
gcc编译速查
| 任务 | 命令 |
|---|---|
| 编译链接一步到位 | gcc hello.c -o hello |
| 只编译不链接 | gcc -c hello.c |
| 只预处理 | gcc -E hello.c -o hello.i |
| 添加头文件路径 | gcc -I /usr/include hello.c |
| 链接库文件 | gcc hello.c -L /usr/lib -lm |
| 调试编译 | gcc -g hello.c -o hello |
| 静态链接 | gcc -static hello.c |
vi命令速查
| 功能 | 命令 |
|---|---|
| 进入输入模式 | i / a / o |
| 返回命令模式 | ESC |
| 进入末行模式 | :(来自命令模式) |
| 保存文件 | :w |
| 退出不保存 | :q! |
| 保存并退出 | :wq 或 😡 |
| 显示行号 | :set nu |
| 删除当前行 | dd |
| 复制当前行 | yy |
| 粘贴 | p |
最后提醒
✓ 重点复习:Shell编程(最容易失分)、gcc编译、make工程管理
✓ 务必掌握:手写Shell脚本、makefile文件、Linux命令组合使用
✓ 考前检查:准备草稿纸演算数字权限、makefile依赖关系、编译过程
✓ 答题技巧:
- 简答题先答关键点,再展开说明
- 编程题逐步分析题目需求,先写框架再补充细节
- 不确定答案时,根据逻辑推断最可能的选项
祝您考试顺利! 🚀