嵌入式复习——第二章

嵌入式复习——第二章

Linux 基础命令

useradd [选项] 用户名

  • 创建用户
  • 需要 root 权限

passwd [用户名]

  • 修改密码
  • 需要 root 权限

ps [选项]

  • 查看进程
  • 选项:
    • -ef 查看所有进程的信息

kill [选项] PID

  • 杀死进程

fdisk [-l]

  • 查看磁盘分区
  • 需要 root 权限

mount [选项] [类型] 设备名 挂载目录

  • 挂载磁盘
  • 需要 root 权限
  • 设备名可以通过 fdisk 查看
  • sudo mount /dev/sdb3 disk 是将 /dev/sdb3 设备挂载到 ~/disk 目录上

umount 挂载目录

  • 卸载磁盘
  • 需要 root 权限

mkdir [选项] 路径

  • 创建目录
  • 选项
    • -m 设置权限,用法类似于 chmod
    • -p 可以是一个路径名称,不存在的目录会自动创建

cat [选项] 文件 1 文件 2 ……

  • 查看文件,多个文件就合并在一起查看
  • 选项
    • -n 显示行号
    • -b 显示非空白行行号

cp [选项] 源目录 目的目录

  • 复制文件
  • 选项
    • -a 保留所有内容

mv [选项] 源目录 目的目录

  • 移动文件
  • 选项
    • -i 有覆盖就询问

rm [选项] 文件目录名

  • 删除文件或目录
  • 选项
    • -i 交互式删除,安全
    • -r 递归删除目录子目录
    • -f 忽略不存在的文件不给出提示

chmod [选项] 符号权限 文件
或者 chmod [选项] 八进制权限 文件

  • 设置权限
  • 第一种方法
    • a/u/g 表示对所有用户,所有者,用户组操作权限
    • +/-/= 表示添加删除设置权限
    • r/w/x 表示读写执行权限
    • chmod +x a.py 把该文件给当前用户增加执行权限
  • 第二种方法
    • 三个数是八进制数,八进制展开为三个二进制位分别表示表示读写执行,例如 5 就是 101 也就是只读和执行
    • chmod 666 disk 给 disk 目录对于所有用户、群组、所有者增加读写权限
  • 选项
    • -R 递归操作,可以给文件夹的所有文件来修改权限

小练习

在 Ubuntu home 目录创建两个文件夹 con1 与 con2,挂在 U 盘到 con1 中,把 con1 中的文件复制到 con2 中,并把 con2 中所有文件改为可读可写

1
2
3
4
5
6
cd ~
mkdir con1 con2
sudo fdisk -l # 查看 U 盘设备名
mount /dev/sdb1 con1
cp -a con con2
chmod -R 666 con2 # R 是递归操作,对里面的所有文件夹

C 编程基础

gcc 的编译流程

  • 预处理,处理头文件、宏,产生 .i 文件
  • 编译,产生 .s 文件
  • 汇编,产生 .o 文件
  • 链接,产生可执行文件

makefile

规则

1
2
目标: 依赖
命令

平凡的样例

1
2
3
4
5
6
7
8
9
david: kang.o yul.o
gcc kang.o bar.o -o myprog
kang.o: kang.c kang.h head.h
gcc -Wall -O -g -c kang.c -o kang.o
yul.o: bar.c head.h
gcc -Wall -O -g -c yul.c -o yul.o

clean:
rm -f myprog

其中从上到下是和编译的顺序相反,也就是一层层向内调用获得依赖

带有变量的样例

1
2
3
4
5
6
7
8
9
10
11
12
OBJS = kang.o yul.o
CC = gcc
CFLAGS = -Wall -O -g
david: $(OBJS)
$(CC) $(OBJS) -o myprog
kang.o: kang.c kang.h head.h
$(CC) $(CFLAGS) -c kang.c -o kang.o
yul.o: bar.c head.h
$(CC) $(CFLAGS) -c yul.c -o yul.o

clean:
rm -f myprog

其中变量是 $(变量名) 的形式来使用的

小练习

在 home 目录下使用 vi 创建 sum.c 文件,比阿尼额代码,实现数字 1 累加到 100 的程序
(1)使用 gcc 编译器编译,生成目标文件 sum_gcc 并执行
(2)编写 makefile 文件,编译 sum.c 文件生成目标文件 sum_makefile 并执行

1
2
3
4
5
vi sum.c 
gcc -o sum.c sum_gcc
./sum_gcc

vi makefile

makefile

1
2
3
4
5
6
7
sum: sum.o
gcc sum.o -o sum
sum.o: sum.c
gcc -c sum.c -o sum.o

clean:
rm -f sum

Bootloader

Bootloader 就是在操作系统的内核运行之前的一段程序,它类似于 PC 中的 BIOS 程序。通过这段程序,可以完成硬件设备的初始化,并建立内存空间的映射关系,从而将系统的软硬件环境带到一个合适的状态,为最终加载系统内核做好准备。