util-linux 和 dosfstools 开发 ,fdisk mkfs工具移植
一.util-linux 是一个开源软件包,包含了许多对 Linux 系统至关重要的工具。它提供了大量的命令行工具,用于管理文件、磁盘、网络等各个方面12。以下是一些主要功能:
- 磁盘管理:工具如
fdisk
、cfdisk
和partx
用于分区管理。 - 文件系统:包括
mkfs
、fsck
和mount
等工具,用于创建、检查和挂载文件系统。 - 系统管理:如
dmesg
、hwclock
和logger
,用于查看系统日志和管理硬件时钟。 - 用户管理:工具如
chfn
、chsh
和login
,用于管理用户信息和登录会话。
1.下载:
git clone https://github.com/util-linux/util-linux.git
安装支持库
sudo apt-get install autopoint bison
2.编译
./autogen.sh
./configure --host=aarch64-linux-android --disable-dependency-tracking --disable-silent-rules --disable-liblastlog2 --disable-nls --prefix=/home/****/util-linux LDFLAGS=-static
整编会报很多错误,所以只编译fdisk,
make fdisk -j16
会在当前路径下生成fdisk可执行文件,推到开发板上给权限运行即可
130|rk3588_s:/data/local/tmp # chmod +x fdisk
rk3588_s:/data/local/tmp # ./fdisk /dev/block/sdaWelcome to fdisk (util-linux 2.40).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.The device contains 'vfat' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.Command (m for help):
二.dosfstools
dosfstools是一组用于创建、检查和修改 FAT 文件系统的命令行工具。它包括以下主要工具:
- mkfs.fat:用于创建 FAT 文件系统。
- fsck.fat:用于检查和修复 FAT 文件系统。
- fatlabel:用于设置或显示 FAT 文件系统的卷标。
1.下载:https://github.com/dosfstools/dosfstools
2.解压编译
./autogen.sh
./configure --prefix=/home/***/dosfstools/bin --host=aarch64-linux-android CC=aarch64-linux-android-gccmake -j16
生成的bin:
ls src/mkfs.fat
测试:
mkfs.fat -F 32 /dev/block/sda1
由于dosfstools没有打包so的方法,只能自己打包成so
cd src/
aarch64-linux-android-gcc -shared -o libdosfstools.so mkfs_fat-mkfs.fat.o mkfs_fat-common.o mkfs_fat-charconv.o mkfs_fat-device_info.o blkdev/mkfs_fat-blkdev.o blkdev/mkfs_fat-linux_version.o
推到system/lib64/目录即可
修改mkfs.fat.c 后快速编译的方法:
aarch64-linux-android-gcc -DPACKAGE_NAME=\"dosfstools\" -DPACKAGE_TARNAME=\"dosfstools\" -DPACKAGE_VERSION=\"4.2+git\" -DPACKAGE_STRING=\"dosfstools\ 4.2+git\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"dosfstools\" -DVERSION=\"4.2+git\" -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DHAVE_WCHAR_H=1 -DSTDC_HEADERS=1 -D_ALL_SOURCE=1 -D_DARWIN_C_SOURCE=1 -D_GNU_SOURCE=1 -D_HPUX_ALT_XOPEN_SOCKET_API=1 -D_NETBSD_SOURCE=1 -D_OPENBSD_SOURCE=1 -D_POSIX_PTHREAD_SEMANTICS=1 -D__STDC_WANT_IEC_60559_ATTRIBS_EXT__=1 -D__STDC_WANT_IEC_60559_BFP_EXT__=1 -D__STDC_WANT_IEC_60559_DFP_EXT__=1 -D__STDC_WANT_IEC_60559_FUNCS_EXT__=1 -D__STDC_WANT_IEC_60559_TYPES_EXT__=1 -D__STDC_WANT_LIB_EXT2__=1 -D__STDC_WANT_MATH_SPEC_FUNCS__=1 -D_TANDEM_SOURCE=1 -D__EXTENSIONS__=1 -DHAVE_ERR_H=1 -DHAVE_LINUX_FD_H=1 -DHAVE_LINUX_HDREG_H=1 -DHAVE_LINUX_VERSION_H=1 -DHAVE_LINUX_LOOP_H=1 -DHAVE_SYS_QUEUE_H=1 -DHAVE_SYS_SYSMACROS_H=1 -DHAVE_ENDIAN_H=1 -DHAVE_SYS_ENDIAN_H=1 -DHAVE_VASPRINTF=1 -DHAVE_DECL_GETMNTENT=1 -DHAVE_DECL_GETMNTINFO=0 -I. -I./blkdev -Wall -Wextra -Wno-sign-compare -Wno-missing-field-initializers -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -g -O2 -MT mkfs_fat-mkfs.fat.o -MD -MP -MF .deps/mkfs_fat-mkfs.fat.Tpo -c -o mkfs_fat-mkfs.fat.o `test -f 'mkfs.fat.c' || echo './'`mkfs.fat.c