1.android 支持emmc 坏块测试工具
代码路径:
./external/e2fsprogs/misc/badblocks.c
Android.bp编译方式:./external/e2fsprogs/misc/Android.bp
//########################################################################
// Build badblocks
cc_binary {
name: "badblocks",
host_supported: true,
defaults: ["e2fsprogs-defaults"],
srcs: ["badblocks.c"],
shared_libs: [
"libext2fs",
"libext2_com_err",
"libext2_uuid",
"libext2_blkid",
"libext2_e2p",
],
system_shared_libs: ["libc", "libdl"],
}
Android.mk编译方式:external/e2fsprogs/misc/Android.mk
#########################################################################
Build badblocks
include $(CLEAR_VARS)
badblocks_src_files := \
badblocks.c
badblocks_c_includes := \
external/e2fsprogs/lib
badblocks_cflags := -O2 -g -W -Wall \
-DHAVE_UNISTD_H \
-DHAVE_ERRNO_H \
-DHAVE_NETINET_IN_H \
-DHAVE_SYS_IOCTL_H \
-DHAVE_SYS_MMAN_H \
-DHAVE_SYS_MOUNT_H \
-DHAVE_SYS_PRCTL_H \
-DHAVE_SYS_RESOURCE_H \
-DHAVE_SYS_SELECT_H \
-DHAVE_SYS_STAT_H \
-DHAVE_SYS_TYPES_H \
-DHAVE_STDLIB_H \
-DHAVE_STRCASECMP \
-DHAVE_STRDUP \
-DHAVE_MMAP \
-DHAVE_UTIME_H \
-DHAVE_GETPAGESIZE \
-DHAVE_LSEEK64 \
-DHAVE_LSEEK64_PROTOTYPE \
-DHAVE_EXT2_IOCTLS \
-DHAVE_LINUX_FD_H \
-DHAVE_TYPE_SSIZE_T \
-DHAVE_GETOPT_H \
-DHAVE_SYS_TIME_H \
-DHAVE_SYS_PARAM_H \
-DHAVE_SYSCONF
badblocks_shared_libraries := \
libext2fs \
libext2_com_err \
libext2_uuid \
libext2_blkid \
libext2_e2p
badblocks_system_shared_libraries := libc
include $(CLEAR_VARS)
LOCAL_STATIC_LIBRARIES := \
$(badblocks_shared_libraries) \
$(badblocks_system_shared_libraries)
LOCAL_SRC_FILES := $(badblocks_src_files)
LOCAL_C_INCLUDES := $(badblocks_c_includes)
LOCAL_CFLAGS := $(badblocks_cflags)
#LOCAL_SHARED_LIBRARIES := $(badblocks_shared_libraries)
#LOCAL_SYSTEM_SHARED_LIBRARIES := $(badblocks_system_shared_libraries)
LOCAL_MODULE := badblocks
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(badblocks_src_files)
LOCAL_C_INCLUDES := $(badblocks_c_includes)
LOCAL_CFLAGS := $(badblocks_cflags)
LOCAL_SHARED_LIBRARIES := $(addsuffix _host, $(badblocks_shared_libraries))
LOCAL_MODULE := badblocks_host
LOCAL_MODULE_STEM := badblocks
LOCAL_MODULE_TAGS := optional
但是编译的时候时没有将其编译到系统当中,要将其编译到系统中,我们可以在对应平台device.mk中加入如下语句,例如我用的时rk3326的sdk,对应的文件device/rockchip/rk3326/device-common.mk
PRODUCT_PACKAGES += badblocks
当然你也可以为了开始验证可以直接使用如下命令进行单独编译,前提是你之前已经全部编译通过了。
source ./build/envsetup.sh
lunch platform_name ###(platform_name对应的sdk)
mmm external/e2fsprogs/misc/
编译完成便可以把out/target/product/platform_name/system/bin/badblocks通过adb push到板子的/system/bin/目录下。
2.使用方式:
badblocks [-svw][-b <分区块大小>][-o <输出文件>][磁盘装置][磁盘区块数][启始区块]
参数说明:
-b<分区块大小> 指定磁盘的区块大小,单位为字节。
-o<输出文件> 将检查的结果写入指定的输出文件。
-s 在检查时显示进度。
-v 执行时显示详细的信息。
-w 在检查时,执行写入测试。
[磁盘装置] 指定要检查的磁盘装置。
[磁盘区块数] 指定磁盘装置的区块总数。
[启始区块] 指定要从哪个区块开始检查。
(1)首先查看板子各个分区对应的block
rk3326_mid:/ # ls -al /dev/block/platform/ff390000.dwmmc/by-name/
total 0
drwxr-xr-x 2 root root 440 2021-05-20 10:49 .
drwxr-xr-x 3 root root 540 2021-05-20 10:49 ..
lrwxrwxrwx 1 root root 20 2021-05-20 10:49 backup -> /dev/block/mmcblk1p9
lrwxrwxrwx 1 root root 20 2021-05-20 10:49 boot -> /dev/block/mmcblk1p7
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 cache -> /dev/block/mmcblk1p11
lrwxrwxrwx 1 root root 20 2021-05-20 10:49 dtb -> /dev/block/mmcblk1p4
lrwxrwxrwx 1 root root 20 2021-05-20 10:49 dtbo -> /dev/block/mmcblk1p5
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 frp -> /dev/block/mmcblk1p16
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 ipmacro -> /dev/block/mmcblk1p17
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 metadata -> /dev/block/mmcblk1p13
lrwxrwxrwx 1 root root 20 2021-05-20 10:49 misc -> /dev/block/mmcblk1p3
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 oem -> /dev/block/mmcblk1p15
lrwxrwxrwx 1 root root 20 2021-05-20 10:49 recovery -> /dev/block/mmcblk1p8
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 security -> /dev/block/mmcblk1p10
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 system -> /dev/block/mmcblk1p12
lrwxrwxrwx 1 root root 20 2021-05-20 10:49 trust -> /dev/block/mmcblk1p2
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 ttspack -> /dev/block/mmcblk1p18
lrwxrwxrwx 1 root root 20 2021-05-20 10:49 uboot -> /dev/block/mmcblk1p1
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 ubuntu -> /dev/block/mmcblk1p19
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 userdata -> /dev/block/mmcblk1p20
lrwxrwxrwx 1 root root 20 2021-05-20 10:49 vbmeta -> /dev/block/mmcblk1p6
lrwxrwxrwx 1 root root 21 2021-05-20 10:49 vendor -> /dev/block/mmcblk1p14
(2)检查uboot分区是否有坏块
rk3326_mid:/ # badblocks -sv /dev/block/mmcblk1p1
Checking blocks 0 to 4095
Checking for bad blocks (read-only test): done
Pass completed, 0 bad blocks found. (0/0/0 errors)
如上是没有坏块的情况,假如有坏块的化,如出现如下字眼
Pass completed, xxx bad blocks found (xxx表示坏块的数目,0一般是没有,表示良好)
最后可以通过脚本来进行全部分区的检测
BREAK_WAIT_TIMES=20
wait_times=1
until [ $wait_times -gt $BREAK_WAIT_TIMES ]
do
echo -e "\n"
echo "badblocks -sv /dev/block/mmcblk1p$wait_times begin."
badblocks -sv /dev/block/mmcblk1p$wait_times
echo "badblocks -sv /dev/block/mmcblk1p$wait_times end."
echo -e "\n"
let wait_times++
done