网站首页 > 精选文章 正文
在“Linux内核映像区别”文章中提到了objcopy命令,本文做个简要介绍。
一、命令介绍
objcopy命令是GNU Binutils工具集中的一种,其功能为:拷贝和转换目标文件。
使用objcopy --help查看该命令的使用方法,部分参数如下:
root@ubuntu:/home/run/code/rockchip-bsp# objcopy --help
Usage: objcopy [option(s)] in-file [out-file]
Copies a binary file, possibly transforming it in the process
The options are:
...
-O --output-target <bfdname> Create an output file in format <bfdname>
...
-R --remove-section <name> Remove section <name> from the output
--remove-relocations <name> Remove relocations from section <name>
-S --strip-all Remove all symbol and relocation information
...
其中:
1)-O:创建指定输出格式的文件。
2)-R:从输出文件中移除指定的段。
3)-S:移除所有的符号表和重定位信息。
4)...
二、使用举例
在编译Linux内核时,使用objcopy命令将elf格式的内核映像vmlinux转为为二进制的内核映像Image。
在make命令中增加-n参数,可以显示编译过程中objcopy命令的用法。
RockPI 4A单板Linux内核编译脚本修改如下:
root@ubuntu:/home/run/code/rockchip-bsp/build# git diff mk-kernel.sh
diff --git a/mk-kernel.sh b/mk-kernel.sh
index cfde0e0b2..2951b8ce0 100755
--- a/mk-kernel.sh
+++ b/mk-kernel.sh
@@ -44,7 +44,7 @@ fi
cd ${LOCALPATH}/kernel
[ ! -e .config ] && echo -e "\e[36m Using ${DEFCONFIG} \e[0m" && make ${DEFCONFIG}
-make -j8
+make -n -j8 ## 增加-n选项
cd ${LOCALPATH}
内核编译的部分log如下:
root@ubuntu:/home/run/code/rockchip-bsp# ./build/mk-kernel.sh rockpi4a
...
KSYM .tmp_kallsyms1.o
KSYM .tmp_kallsyms2.o
LD vmlinux
SORTEX vmlinux
SYSMAP System.map
...
make -f ./scripts/Makefile.modpost
set -e; echo ' OBJCOPY arch/arm64/boot/Image';
## 使用rk3399对应的交叉编译工具链提供的objcopy命令生成Image
aarch64-linux-gnu-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux arch/arm64/boot/Image;
printf '%s\n' 'cmd_arch/arm64/boot/Image := aarch64-linux-gnu-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux arch/arm64/boot/Image' > arch/arm64/boot/.Image.cmd
echo ' MODPOST 933 modules'; find .tmp_versions -name '*.mod' | xargs -r grep -h '\.ko#39; | sort -u | sed 's/\.ko$/.o/' | scripts/mod/modpost -o ./Module.symvers -S -s -T - vmlinux
从上面的日志中可以看出,使用objcopy命令用法为:
aarch64-linux-gnu-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux arch/arm64/boot/Image
注:本文仅在简书、OSCHINA和今日头条发布过,转载请标注原作者和链接。
猜你喜欢
- 2024-12-14 Advanced-Copy——在 Linux 中复制/移动文件时显示进度条
- 2024-12-14 linux的复制粘贴
- 2024-12-14 Linux小技巧:如何在 Linux 中复制/移动文件时显示进度条?
- 2024-12-14 聊聊我对C++深拷贝与浅拷贝的理解
- 2024-12-14 Linux常用功能——文件远程传输
- 2024-12-14 linux之cp强制复制文件
- 2024-12-14 linux采用scp命令拷贝文件到本地,拷贝本地文件到远程服务器
- 2024-12-14 Linux之ssh-copy-id命令
- 2024-12-14 Linux复制文件和目录(cp命令)
- 2024-12-14 linux远程复制文件命令小总结
- 最近发表
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)