目录
1.read
命令的功能是用于读取单行数据内容,一般是从标准输入中读取数值,用于给变量赋值。
语法格式:read [参数]
常用参数:
-a 定义一个数组,以空格为间隔符进行赋值
-d 定义一个结束标志
-p 设置提示信息
-e 在输入的时候可以使用命令补全功能
-n 定义输入文本的长度
-r 禁用转义符(\)
-s 输入字符不在屏幕显示
-t 限定最长等待时间
-u 从文件描述符中读入信息
2.make
命令 – 编译内核或源码文件
make命令的功能是用于编译内核或源码文件。make是GNU工程化编译工具,用于编译众多相互关联的源代码文件,也可以编译内核或模块功能,以工程化的工作方式,提高开发效率。
初次运行make命令时,它会通过扫描Makefile文件找到目标及其依赖关系,并在建立依赖关系后依次编译所对应的源码程序。
语法格式: make [参数] 文件
常用参数:
-r 禁用内置的隐含规则
-B 始终无条件make所有目标
-b 忽略兼容性
-C<目录> 更改为指定目录
-L 在符号链接和目标之间使用最后的修改时间
-n 实际上不运行任何命令,只显示出来
-o<文件> 不编译指定的文件
-e 环境变量覆盖makefile
-d 显示打印调试信息
-i 从命中忽略错误
-w 显示当前目录
-t 创建目标,而不是改造它们
-p 显示make的内部数据库
-q 安静模式
-R 禁用内置变量设置
-s 不回显命令
-I<目录> 搜索指定目录中包含的makefile
-f<文件> 读取指定文件作为makefile文件
-k 当有些目标不能make下去时,继续执行
-j<作业编号> 指定工作编号的作业一次完成(多线程编译)
make V=0 不显示编译过程,默认的
make V=1 或者 make VERBOSE=1 显示编译过程
3.sgdisk
命令 – Linux和Unix的命令行GPT操纵器
sgdisk是Linux下操作GPT分区的工具, sgdisk程序使用完全基于命令行的用户界面,使其适用于脚本或想要对磁盘进行一次或两次快速更改的专家。
语法格式:sgdisk [参数] [设备]
常用参数:
-p 打印分区表
-d x 删除分区
-n x:y:z 创建一个编号 x 的新分区,从 y扇区 开始,到 z扇区 结束
-c x:y 更改分区 x 的名称为 y
-t x:y -t x:y 将分区 x 的类型更改为 y
–list-types 列出分区类型代码
参考实例
打印分区表:
[root@linuxcool ~]# sgdisk -p /dev/sda
删除sda的第一个分区:
[root@linuxcool ~]# sgdisk -d 1 /dev/sda
创建一个编号 1 的新分区,从 1MiB 开始,到 2MiB 结束:
[root@linuxcool ~]# sgdisk -n 1:1MiB:2MiB /dev/sda
把编号为 1 的分区名称改为 grub:
[root@linuxcool ~]# sgdisk -c 1:grub /dev/sda
将编号为 1 的分区,类型更改为 ef02:
[root@linuxcool ~]# sgdisk -t 1:ef02 /dev/sda
列出分区类型代码:
[root@linuxcool ~]# sgdisk --list-types
4.dd
拷贝及转换文件
dd命令来自于英文词组“disk dump”的缩写,其功能是用于拷贝及转换文件。
使用dd命令可以按照指定大小的数据块来拷贝文件,并在拷贝的过程中对内容进行转换。
语法格式:dd 参数 对象
常用参数:
-v 显示版本信息
-h 显示帮助信息
参考实例
# dd : 拷贝的命令
# if : 输入的文件
# of : 输出的文件
# conv=fdatasync : 将输入的文件所有内容的读到缓冲区中,然后一次性的写入到输出文件中
sudo dd if=u-boot-spl.stm32 of=/dev/sdb1 conv=fdatasync
生成一个指定大小(500M)的新文件:
[root@linuxcool ~]# dd if=/dev/zero of=bigfile count=1 bs=500M
1+0 records in
1+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 1.13337 s, 463 MB/s
拷贝指定文件的前50个字节:
[root@linuxcool ~]# dd if=anaconda-ks.cfg of=ana.cfg count=1 bs=50
1+0 records in
1+0 records out
50 bytes copied, 0.000441764 s, 113 kB/s
拷贝指定文件的内容,并将所有字符转换成大写后输出到新文件中:
[root@linuxcool ~]# dd if=anaconda-ks.cfg of=ana.cfg conv=ucase
2+1 records in
2+1 records out
1388 bytes (1.4 kB, 1.4 KiB) copied, 0.000234248 s, 5.9 MB/s
5.mkimage
mkimage工具是u-boot用来制作镜像文件的工具,其源代码在u-boot源码的tools目录下:mkimage.c。
我们使用bootm命令加载的内核和根文件系统,都要用这个工具加上个头。
语法格式:mkimage [参数]
常用参数:
-A : 设置架构
-T : 设定类型
-C : 压缩类型 none : 没有压缩
-O :设置操作系统
-a : 加载地址
-e : 入口指针
-n : 镜像的名字
-d : 镜像的数据文件
-A
CPU 架构,可选的值有:
“alpha”,”arm”,”x86″,”ia64″,”m6k8″,”microblaze”,”mips”,”mips64″,”nios”,”nios2″,”ppc”,”s390″,”sh”,”sparc”,”sparc64″,
“blackfin”,”avr32″
-O 操作系统。可选的值有:
“4_4bsd”,”artos”,”esix”,”freebsd”,”irix”,”linux”,”lynxos”,”ncr”,”netbsd”,”openbsd”,”psos”,”qnx”,”rtems”,”sco”,”sloaris”,
“u-boot”,vxworks”
-T 镜像类型。可选的值有:
“filesystem”,”firmware”,”firmware”,”kernel”,”multi”,”ramdisk”,”script”,”standalone”,”flat_dt”
-C 镜像压缩类型。可选的值有:
“none”,”bzip2″,”gzip” none为没有压缩
mkimage:工具, 给u-boot.bin文件添加64字节的文件头得到u-boot.img镜像文件
6.cat
使用cat命令完成两个文件的合并或者拼接
#将两个文件拼接起来重定向到u-boot-dtb.bin中
cat u-boot-nodtb.bin dts/dt.dtb > u-boot-dtb.bin
7.objcopy
将u-boot的elf文件转换为.bin文件
linux@ubuntu:arm-linux-gnueabihf-objcopy -O binary u-boot u-boot-nodtb.bin
8.ld
将目标文件(.o文件)链接生成一个.elf的可执行文件文件
linux@ubuntu:arm-linux-gnueabihf-ld -Ttext=0xc0008000 asm-led.o -o asm-led.elf
9.objdump
将.elf文件反汇编生成.dis的反汇编文件
linux@ubuntu:arm-linux-gnueabihf-objdump -D asm-led.elf > asm-led.dis
10.size
查看elf文件的各个段的大小
linux@ubuntu:1-asm-led$ arm-linux-gnueabihf-size asm-led.elf
text data bss dec hex filename
172 0 0 172 ac asm-led.elf
11.nm
查看elf文件的符号表的信息(函数名和函数的入口地址信息)
linux@ubuntu:01-asm-led$ arm-linux-gnueabihf-nm asm-led.elf
c00180ac T __bss_end__
c00180ac T _bss_end__
c00180ac T __bss_start
c00180ac T __bss_start__
c0008080 t delay_1s
c00180ac T _edata
c00180ac T __end__
c00180ac T _end
c0008054 t loop
c0008084 t mm
c0008000 T _start
12.readelf
readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。
这里的elf-file(s)就表示那些被检查的文件。
可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。
-a --all 显示全部信息 等同于 -h -l -S -s -r -d -V -A -I
-h --file-header 显示elf文件开始的文件头信息
-l --program-headers 显示elf文件程序头信息
-S --section-headers 显示节头信息
-g --section-groups 显示节组信息
-t --section-details 显示部分详细信息
-e --headers 等价于 -h -l -S
-s --syms 显示符号表
-d --dynamic 显示elf程序依赖的动态库
-V --version-info 显示版本段的信息
linux@ubuntu:01-asm-led$ arm-linux-gnueabihf-readelf -h asm-led.elf
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0xc0008000
Start of program headers: 52 (bytes into file)
Start of section headers: 33748 (bytes into file)
Flags: 0x5000200, Version5 EABI, soft-float ABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 1
Size of section headers: 40 (bytes)
Number of section headers: 10
Section header string table index: 9
13.trip
作用:嵌入式设备的资源有限,比如flash空间的大小有限,编译生成的各种可执行文件尽可能的小,并且压缩之后不影响程序的允许。
strip命令在进行压缩时,将elf文件中无用的符号信息删除,不影响程序的允许。
切记不可以对中间文件执行压缩的命令,比如.o文件
linux@ubuntu:02-led-c$ ls -l interface.elf
-rwxrwxr-x 1 linux linux 52340 Aug 24 01:34 interface.elf
linux@ubuntu:02-led-c$ arm-linux-gnueabihf-strip interface.elf
linux@ubuntu:02-led-c$ ls -l interface.elf
-rwxrwxr-x 1 linux linux 42660 Aug 31 20:39 interface.elf
14.addr2line
其功能是将函数地址解析成文件名或行号的工具。给出一个可执行文件中的地址或一个可重定位对象中的偏移部分的地址,使用调试信息来找出与之相关的文件名和行号。
在linux驱动的开发中,如果出现段错误,会导致内核的崩溃,
此时内核回报一个错误信息,同时显示错误信息出现的地址的信息,此时就可以使用addr2line命令定位此地址信息对应的文件名,函数名及行号。
-e :指定elf文件
-f : 回显函数名及行号
linux@ubuntu:02-led-c$ arm-linux-gnueabihf-nm interface.elf
c0009948 T hal_led_init
linux@ubuntu:02-led-c$ arm-linux-gnueabihf-addr2line 0xc0009948 -e interface.elf -f
hal_led_init
/home/linux/DC22051/arm/02-led-c/src/led.c:45
15.find
根据给定的路径和条件查找相关文件或目录
find [路径] [参数]
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新但比f2旧的文件
-type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
16.grep
grep [参数] 文件
文件内容搜索命令,搜索文件中的字符串
-n : 显示行号
-R : 递归搜索
-i : 忽略大小写
-w: 按照单词精确查找
-c 只输出匹配行的数量
-l 只列出符合匹配的文件名,不列出具体的匹配行
-n 列出所有的匹配行,显示行号
17.cp
用于将一个或多个文件或目录复制到指定位置,常用于文件的备份工作
cp [参数] 源文件 目标文件
-r 递归复制文件和目录,复制目录时若忘记加则会直接报错
-f 若目标文件已存在,则会直接覆盖原文件
-p 保留源文件或目录的所有属性
-v 详细显示cp命令执行的操作过程
-d 当复制符号链接(软链接)时,把目标文件或目录也建立为符号链接
并指向与源文件或目录连接的原始文件或目录
-l 对源文件建立硬链接,而非复制文件
-s 对源文件建立符号链接,而非复制文件
-a 等价于“pdr”选项
18.ln
软链接
类似于windows 当中的快捷方式. 可以通过链接文件,找到原来所在的文件.
ln -s 路径/被链接文件 路径/生成的链接文件 (不加路径默认在当前路径下执行)
demo:
ln -s link.c link1.c // 给 link.c 创建一个软连接 link1.c
注意:
删除生成的链接文件,被链接文件没有任何变化, 内容也不会被删除
删除被链接文件, 链接会断开,生成链接文件还是存在的 (不过内容为 空)
软链接可以链接目录
被软链接 连接的目录或者文件,链接数不会增加
被链接文件与链接文件的inode不同
硬链接
类似于给文件起一个别名.类似于复制
ln 路径/被链接文件 路径/生成的链接文件 .(不加路径默认在当前路径下执行)
demo :
ln link.c link1.c // 给 link.c 创建一个硬链接 link1.c
注意:
硬链接只能链接文件, 不能链接目录
创建硬链接的时候,链接数是会增加的(被链接文件与生成的链接文件 链接数相同)
硬链接与被链接文件的inode号是相同的.
删除一个源文件(被链接文件)或者链接文件 对其他不产生影响.