问题
SDK在打包sd镜像的时候用了挂载loop设备然后分区的操作,会涉及到提权问题,提权之后会产生隐式安全的问题。
由于涉及到提权问题,用户在build时在打包镜像过程中有可能权限不够,milkv 外设验证中就出现了该问题。
SD镜像
SD镜像是指通过将嵌入式系统或其他操作系统完整地复制到SD卡或类似存储介质中创建的一个映像文件。它包含了完整的文件系统、操作系统和其他相关的数据。
SD镜像通常用于将整个嵌入式系统部署到SD卡或类似存储介质上,以便将其用作嵌入式设备的启动介质。镜像文件包含了预先配置好的文件系统、内核、驱动程序和其他所需的组件,可以直接烧录到SD卡中,然后插入到嵌入式设备中进行启动和运行。
创建SD镜像的过程涉及将整个文件系统的内容复制到一个文件中,并确保文件系统的结构、权限和属性等信息得以保留。这样,当镜像文件被写入SD卡时,SD卡中的分区和文件系统结构与原始系统完全相同。
SD镜像的好处是可以方便地复制和部署嵌入式系统,以及在多个设备之间进行系统的快速复制和恢复。它在嵌入式开发、系统定制和部署中扮演着重要的角色。
loop
在Linux中,loop是一种设备驱动程序,用于将一个文件作为块设备进行访问。它允许将一个普通文件映射为一个块设备,从而可以在该文件上模拟一个独立的块设备。
通过使用loop设备,可以将镜像文件、虚拟磁盘映像或其他特定格式的文件系统
载为一个独立的文件系统。这样,可以对该文件系统进行读取、写入和访问,就像访问实际的硬盘或分区一样。
loop设备的工作原理是将一个文件映射到一个块设备节点,然后可以使用mount命令将该设备挂载到指定的挂载点上。在挂载完成后,可以通过文件系统路径访问和操作该文件中的数据。
使用losetup命令可以将一个文件与loop设备进行关联,并为其分配一个可用的loop设备节点。例如,可以使用以下命令将名为image.img的镜像文件与一个loop设备进行关联:
sudo losetup /dev/loop0 image.img
然后,可以使用mount命令将/dev/loop0设备挂载到指定的挂载点上,使其可访问和使用。
sudo mount /dev/loop0 /mnt
这样,image.img文件中的文件系统将以/mnt作为根目录挂载到系统中,可以进行文件操作和访问。
需要注意的是,在使用完毕后,应该使用umount命令将挂载点卸载,并使用losetup -d命令断开loop设备与文件的关联,释放相应的设备节点。
sd_gen_burn_image.sh代码阅读
#!/bin/bash
# a sd image generator for sophpi
# usage
if [ "$#" -ne "1" ] #如果输入的参数数量不等于1就打印以下语句
then
echo "usage: sudo ./sd_gen_burn_image.sh OUTPUT_DIR"
echo ""
echo " The script is used to create a sdcard image with two partitions, "
echo " one is fat32 with 128MB, the other is ext4 with 256MB."
echo " You can modify the capacities in this script as you wish!"
echo ""
echo "Note: Please backup