File-backed Storage

本文介绍如何利用File-backedStorageGadget技术,通过文件或块设备作为存储后端,实现USB存储设备在不同操作系统间的兼容性和灵活性配置。包括在Windows/Linux主机上挂载和操作IDE硬盘、使用RAM块文件作为存储后端、以及在Blackfin嵌入式设备上使用NAND闪存作为USB存储解决方案。详细步骤和配置细节帮助开发者实现多样化的存储需求。

File-backed Storage Gadget

File-backed Storage implements the USB Mass Storage class (as CB, CBI, or BBB), appearing to the host as a SCSI disk drive. This uses a file or block device as a backing store for the drive, like the “loop” driver. (Read about how to set up the backing store.) The 2.6 version also lets you change the backing file associated with a given LUN. For example, you might specify the block device for an MMC card when that card is inserted (maybe using a hotplug script, or a GUI). Note that for MS-Windows interoperability, your backing store needs to be formatted with a DOS partition label. Data partitions can then be formatted with VFAT (for the widest interoperability) or some other filesystem (such as ext3 or reiserfs, for use with Linux).

Souce code is drivers/usb/gadget/file_storage.c

Kernel config of File-backed Storage

[Linux Kernel Configuration] -→ [Device Drivers] -→ [USB support] -→ [USB Gadget Support]

<M> Support for USB Gadgets 
<M>   File-backed Storage Gadget
[*]     File-backed Storage Gadget testing version

Use EZKIT-BF548 as USB Mass Storage device for Windows/Linux Host

Use real ATAPI IDE disk of EZKIT-BF548

EZKIT-BF548 provides IDE hard disk connected by ATAPI of BF54x. If the kernel add BF54x ATAPI support, some you can get following booting message. We can use this real hard disk as backing storage of file-backed storage gadget driver.

register bfin atapi driver
scsi0 : pata-bf54x
ata1: PATA max UDMA/100 cmd 0x00000000 ctl 0xffc03800 bmdma 0x00000000 irq 68
ata1.00: ATA-6: TOSHIBA MK4032GAX, AD101A, max UDMA/100
ata1.00: 78140160 sectors, multi 16: LBA48 
ata1.00: configured for UDMA/100
blk_queue_max_hw_segments: set to minimum 1
scsi 0:0:0:0: Direct-Access     ATA      TOSHIBA MK4032GA AD10 PQ: 0 ANSI: 5
sd 0:0:0:0: [sda] 78140160 512-byte hardware sectors (40008 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
sd 0:0:0:0: [sda] 78140160 512-byte hardware sectors (40008 MB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sda: sda1
sd 0:0:0:0: [sda] Attached SCSI disk

On EZKIT-BF548, install the g_file_storage driver:

root:~> modprobe g_file_storage file=/dev/sda1 stall=0
g_file_storage gadget: File-backed Storage Gadget, version: 28 November 2005
g_file_storage gadget: Number of LUNs=1
g_file_storage gadget-lun0: ro=0, file: /dev/sda1
g_file_storage gadget: full speed config #1
root:~> 

Then on the host PC, both Windows and Linux can found the 40GB driver mounted. You can do fdisk/formate/copy/delete operation as normal disk.

If the IDE hard disk has been partitioned and formated as MSDOS (for Windows) or other file system can be recognized by host PC, it will be automatically mounted on you PC. You can directly operate this disk driver. If not, on Windows host please go to [Control Panel] --> [Administrative Tools] --> [Computer Management] --> [Disk Management] and you can find the 40GB hard disk is ready for partition and format. After that, you can use the hard disk driver normally.

Use RAM based file as backing storage

Sometime there is no such hard disk installed in your system, then we can use RAM based block file as backing storage as below:

root:~> dd if=/dev/zero of=fsg.block bs=1M count=16
16+0 records in
16+0 records out
root:~> modprobe g_file_storage file=/fsg.block stall=0
g_file_storage gadget: File-backed Storage Gadget, version: 28 November 2005
g_file_storage gadget: Number of LUNs=1
g_file_storage gadget-lun0: ro=0, file: /fsg.block
g_file_storage gadget: full speed config #1
root:~>

You can partition and format this block disk driver on host Windows/Linux PC. The block file also can be partitioned and formated on Blackfin embedded devices, please read"Backing Storage for the File-backed Storage Gadget" as reference.

Use NAND flash on BF548-EZKIT as USB mass storage

Sometimes, people have Nand flash on their device, and they want this Nand flash accessible as USB storage. In many case, they access this storage using a MS Windows PC, which is not friendly to jffs2 or yaffs2. Here is a workaround:

Enable yaffs2 on Nand

Please refer to yaffs. Here we have yaffs2 on /dev/mtdblock1.

Create a file-backed VFAT FS backed on Yaffs2/Nand
root:/> mount -t yaffs2 -o sync /dev/mtdblock1 /mnt/
yaffs: dev is 32505857 name is "mtdblock1"
yaffs: Attempting MTD mount on 31.1, "mtdblock1"
yaffs: restored from checkpoint

root:/> cd /mnt
root:/mnt> dd if=/dev/zero of=/mnt/vfat.bin bs=1M count=100
100+0 records in
100+0 records out

root:/mnt> mkdosfs vfat.bin 
mkdosfs 2.10 (22 Sep 2003)

root:/mnt> mkdir vfat_dir

root:/mnt> mount -t vfat -o sync /mnt/vfat.bin /mnt/vfat_dir/

root:/mnt> cd vfat_dir/

root:/mnt/vfat_dir> time dd if=/dev/zero of=/mnt/vfat_dir/test.bin bs=1M count=50
50+0 records in
50+0 records out
real    0m 35.49s
user    0m 0.00s
sys     0m 4.28s

root:/mnt/vfat_dir> modprobe g_file_storage file=/mnt/vfat.bin removable=1 
g_file_storage gadget: File-backed Storage Gadget, version: 28 November 2005
g_file_storage gadget: Number of LUNs=1
g_file_storage gadget-lun0: ro=0, file: /mnt/vfat.bin

Connect BF548-EZKIT with Windows PC via USB cable, the Nand flash can be used as a VFAT disk.

(gdb) file syslog-ng warning: exec file is newer than core file. Reading symbols from syslog-ng... (No debugging symbols found in syslog-ng) (gdb) (gdb) (gdb) core-file core warning: Can't open file /usr/sbin/syslog-ng during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libsyslogformat.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libaffile.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libafsocket.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libconfgen.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libbasicfuncs.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libjson-plugin.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libappmodel.so during file-backed mapping note processing warning: Can't open file /usr/lib/libcrypto.so.1.1.1 during file-backed mapping note processing warning: Can't open file /usr/lib/libssl.so.1.1.1 during file-backed mapping note processing warning: Can't open file /lib/libjson-c.so.5 during file-backed mapping note processing warning: Can't open file /lib/libc-2.32.so during file-backed mapping note processing warning: Can't open file /lib/libpthread-2.32.so during file-backed mapping note processing warning: Can't open file /lib/libdl-2.32.so during file-backed mapping note processing warning: Can't open file /usr/lib/libpcre2-8.so.0.11.2 during file-backed mapping note processing warning: Can't open file /usr/lib/libsecret-storage.so.0.0.0 during file-backed mapping note processing warning: Can't open file /usr/lib/libevtlog-4.7.so.0.0.0 during file-backed mapping note processing warning: Can't open file /usr/lib/libintl.so.8.1.1 during file-backed mapping note processing warning: Can't open file /usr/lib/libglib-2.0.so.0.5800.3 during file-backed mapping note processing warning: Can't open file /usr/lib/libgthread-2.0.so.0.5800.3 during file-backed mapping note processing warning: Can't open file /usr/lib/libgmodule-2.0.so.0.5800.3 during file-backed mapping note processing warning: Can't open file /lib/librt-2.32.so during file-backed mapping note processing warning: Can't open file /lib/libm-2.32.so during file-backed mapping note processing warning: Can't open file /usr/lib/libsyslog-ng-4.7.so.0.0.0 during file-backed mapping note processing warning: Can't open file /usr/lib/libiconv.so.2.4.0 during file-backed mapping note processing warning: Can't open file /lib/ld-2.32.so during file-backed mapping note processing warning: Can't open file /tmp/syslog-ng.persist during file-backed mapping note processing warning: exec file is newer than core file. [New LWP 8050] warning: Could not load shared library symbols for 25 libraries, e.g. /usr/lib/libiconv.so.2. Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? Core was generated by `/usr/sbin/syslog-ng --foreground -f /etc/syslog-ng.conf --stderr'. Program terminated with signal SIGABRT, Aborted. #0 0xf777e68c in ?? () (gdb)
最新发布
11-28
root@prplOS:/tmp/faults/dump/8# cat maps 00010000-00013000 r-xp 00000000 fe:00 5842 /usr/sbin/syslog-ng 00022000-00023000 r--p 00002000 fe:00 5842 /usr/sbin/syslog-ng 00023000-00024000 rw-p 00003000 fe:00 5842 /usr/sbin/syslog-ng 01917000-019bc000 rw-p 00000000 00:00 0 [heap] f72e1000-f72eb000 r-xp 00000000 fe:00 3327 /usr/lib/syslog-ng/libsyslogformat.so f72eb000-f72fb000 ---p 0000a000 fe:00 3327 /usr/lib/syslog-ng/libsyslogformat.so f72fb000-f72fc000 r--p 0000a000 fe:00 3327 /usr/lib/syslog-ng/libsyslogformat.so f72fc000-f72fd000 rw-p 0000b000 fe:00 3327 /usr/lib/syslog-ng/libsyslogformat.so f72fd000-f7316000 r-xp 00000000 fe:00 3350 /usr/lib/syslog-ng/libaffile.so f7316000-f7325000 ---p 00019000 fe:00 3350 /usr/lib/syslog-ng/libaffile.so f7325000-f7326000 r--p 00018000 fe:00 3350 /usr/lib/syslog-ng/libaffile.so f7326000-f7327000 rw-p 00019000 fe:00 3350 /usr/lib/syslog-ng/libaffile.so f7327000-f7328000 rw-p 00000000 00:00 0 f7328000-f734e000 r-xp 00000000 fe:00 3329 /usr/lib/syslog-ng/libafsocket.so f734e000-f735d000 ---p 00026000 fe:00 3329 /usr/lib/syslog-ng/libafsocket.so f735d000-f735e000 r--p 00025000 fe:00 3329 /usr/lib/syslog-ng/libafsocket.so f735e000-f735f000 rw-p 00026000 fe:00 3329 /usr/lib/syslog-ng/libafsocket.so f735f000-f73a3000 rw-p 00000000 00:00 0 f73a3000-f73a5000 r-xp 00000000 fe:00 3352 /usr/lib/syslog-ng/libconfgen.so f73a5000-f73b4000 ---p 00002000 fe:00 3352 /usr/lib/syslog-ng/libconfgen.so f73b4000-f73b5000 r--p 00001000 fe:00 3352 /usr/lib/syslog-ng/libconfgen.so f73b5000-f73b6000 rw-p 00002000 fe:00 3352 /usr/lib/syslog-ng/libconfgen.so f73b6000-f73c1000 r-xp 00000000 fe:00 3342 /usr/lib/syslog-ng/libbasicfuncs.so f73c1000-f73d0000 ---p 0000b000 fe:00 3342 /usr/lib/syslog-ng/libbasicfuncs.so f73d0000-f73d1000 r--p 0000a000 fe:00 3342 /usr/lib/syslog-ng/libbasicfuncs.so f73d1000-f73d2000 rw-p 0000b000 fe:00 3342 /usr/lib/syslog-ng/libbasicfuncs.so f73d2000-f73de000 r-xp 00000000 fe:00 3334 /usr/lib/syslog-ng/libjson-plugin.so f73de000-f73ed000 ---p 0000c000 fe:00 3334 /usr/lib/syslog-ng/libjson-plugin.so f73ed000-f73ee000 r--p 0000b000 fe:00 3334 /usr/lib/syslog-ng/libjson-plugin.so f73ee000-f73ef000 rw-p 0000c000 fe:00 3334 /usr/lib/syslog-ng/libjson-plugin.so f73ef000-f73f6000 r-xp 00000000 fe:00 3328 /usr/lib/syslog-ng/libappmodel.so f73f6000-f7406000 ---p 00007000 fe:00 3328 /usr/lib/syslog-ng/libappmodel.so f7406000-f7407000 r--p 00007000 fe:00 3328 /usr/lib/syslog-ng/libappmodel.so f7407000-f7408000 rw-p 00008000 fe:00 3328 /usr/lib/syslog-ng/libappmodel.so f7408000-f74ca000 rw-p 00000000 00:00 0 f74ca000-f76a0000 r-xp 00000000 fe:00 3140 /usr/lib/libcrypto.so.1.1.1 f76a0000-f76af000 ---p 001d6000 fe:00 3140 /usr/lib/libcrypto.so.1.1.1 f76af000-f76c0000 r--p 001d5000 fe:00 3140 /usr/lib/libcrypto.so.1.1.1 f76c0000-f76c2000 rw-p 001e6000 fe:00 3140 /usr/lib/libcrypto.so.1.1.1 f76c2000-f76c3000 rw-p 00000000 00:00 0 f76c3000-f771e000 r-xp 00000000 fe:00 3580 /usr/lib/libssl.so.1.1.1 f771e000-f772e000 ---p 0005b000 fe:00 3580 /usr/lib/libssl.so.1.1.1 f772e000-f7731000 r--p 0005b000 fe:00 3580 /usr/lib/libssl.so.1.1.1 f7731000-f7734000 rw-p 0005e000 fe:00 3580 /usr/lib/libssl.so.1.1.1 f7734000-f7740000 r-xp 00000000 fe:00 893 /lib/libjson-c.so.5 f7740000-f774f000 ---p 0000c000 fe:00 893 /lib/libjson-c.so.5 f774f000-f7750000 r--p 0000b000 fe:00 893 /lib/libjson-c.so.5 f7750000-f7751000 rw-p 0000c000 fe:00 893 /lib/libjson-c.so.5 f7751000-f7881000 r-xp 00000000 fe:00 1191 /lib/libc-2.32.so f7881000-f7891000 ---p 00130000 fe:00 1191 /lib/libc-2.32.so f7891000-f7893000 r--p 00130000 fe:00 1191 /lib/libc-2.32.so f7893000-f7894000 rw-p 00132000 fe:00 1191 /lib/libc-2.32.so f7894000-f7897000 rw-p 00000000 00:00 0 f7897000-f78ad000 r-xp 00000000 fe:00 859 /lib/libpthread-2.32.so f78ad000-f78bd000 ---p 00016000 fe:00 859 /lib/libpthread-2.32.so f78bd000-f78be000 r--p 00016000 fe:00 859 /lib/libpthread-2.32.so f78be000-f78bf000 rw-p 00017000 fe:00 859 /lib/libpthread-2.32.so f78bf000-f78c1000 rw-p 00000000 00:00 0 f78c1000-f78c3000 r-xp 00000000 fe:00 851 /lib/libdl-2.32.so f78c3000-f78d2000 ---p 00002000 fe:00 851 /lib/libdl-2.32.so f78d2000-f78d3000 r--p 00001000 fe:00 851 /lib/libdl-2.32.so f78d3000-f78d4000 rw-p 00002000 fe:00 851 /lib/libdl-2.32.so f78d4000-f7927000 r-xp 00000000 fe:00 3796 /usr/lib/libpcre2-8.so.0.11.2 f7927000-f7936000 ---p 00053000 fe:00 3796 /usr/lib/libpcre2-8.so.0.11.2 f7936000-f7937000 r--p 00052000 fe:00 3796 /usr/lib/libpcre2-8.so.0.11.2 f7937000-f7938000 rw-p 00053000 fe:00 3796 /usr/lib/libpcre2-8.so.0.11.2 f7938000-f793a000 r-xp 00000000 fe:00 3120 /usr/lib/libsecret-storage.so.0.0.0 f793a000-f7949000 ---p 00002000 fe:00 3120 /usr/lib/libsecret-storage.so.0.0.0 f7949000-f794a000 r--p 00001000 fe:00 3120 /usr/lib/libsecret-storage.so.0.0.0 f794a000-f794b000 rw-p 00002000 fe:00 3120 /usr/lib/libsecret-storage.so.0.0.0 f794b000-f794e000 r-xp 00000000 fe:00 3299 /usr/lib/libevtlog-4.7.so.0.0.0 f794e000-f795d000 ---p 00003000 fe:00 3299 /usr/lib/libevtlog-4.7.so.0.0.0 f795d000-f795e000 r--p 00002000 fe:00 3299 /usr/lib/libevtlog-4.7.so.0.0.0 f795e000-f795f000 rw-p 00003000 fe:00 3299 /usr/lib/libevtlog-4.7.so.0.0.0 f795f000-f7967000 r-xp 00000000 fe:00 4878 /usr/lib/libintl.so.8.1.1 f7967000-f7976000 ---p 00008000 fe:00 4878 /usr/lib/libintl.so.8.1.1 f7976000-f7977000 r--p 00007000 fe:00 4878 /usr/lib/libintl.so.8.1.1 f7977000-f7978000 rw-p 00008000 fe:00 4878 /usr/lib/libintl.so.8.1.1 f7978000-f7a5f000 r-xp 00000000 fe:00 3144 /usr/lib/libglib-2.0.so.0.5800.3 f7a5f000-f7a6f000 ---p 000e7000 fe:00 3144 /usr/lib/libglib-2.0.so.0.5800.3 f7a6f000-f7a70000 r--p 000e7000 fe:00 3144 /usr/lib/libglib-2.0.so.0.5800.3 f7a70000-f7a71000 rw-p 000e8000 fe:00 3144 /usr/lib/libglib-2.0.so.0.5800.3 f7a71000-f7a72000 r-xp 00000000 fe:00 3794 /usr/lib/libgthread-2.0.so.0.5800.3 f7a72000-f7a81000 ---p 00001000 fe:00 3794 /usr/lib/libgthread-2.0.so.0.5800.3 f7a81000-f7a82000 r--p 00000000 fe:00 3794 /usr/lib/libgthread-2.0.so.0.5800.3 f7a82000-f7a83000 rw-p 00001000 fe:00 3794 /usr/lib/libgthread-2.0.so.0.5800.3 f7a83000-f7a85000 r-xp 00000000 fe:00 2892 /usr/lib/libgmodule-2.0.so.0.5800.3 f7a85000-f7a94000 ---p 00002000 fe:00 2892 /usr/lib/libgmodule-2.0.so.0.5800.3 f7a94000-f7a95000 r--p 00001000 fe:00 2892 /usr/lib/libgmodule-2.0.so.0.5800.3 f7a95000-f7a96000 rw-p 00002000 fe:00 2892 /usr/lib/libgmodule-2.0.so.0.5800.3 f7a96000-f7a9c000 r-xp 00000000 fe:00 1221 /lib/librt-2.32.so f7a9c000-f7aab000 ---p 00006000 fe:00 1221 /lib/librt-2.32.so f7aab000-f7aac000 r--p 00005000 fe:00 1221 /lib/librt-2.32.so f7aac000-f7aad000 rw-p 00006000 fe:00 1221 /lib/librt-2.32.so f7aad000-f7b09000 r-xp 00000000 fe:00 861 /lib/libm-2.32.so f7b09000-f7b18000 ---p 0005c000 fe:00 861 /lib/libm-2.32.so f7b18000-f7b19000 r--p 0005b000 fe:00 861 /lib/libm-2.32.so f7b19000-f7b1a000 rw-p 0005c000 fe:00 861 /lib/libm-2.32.so f7b1a000-f7bfe000 r-xp 00000000 fe:00 3207 /usr/lib/libsyslog-ng-4.7.so.0.0.0 f7bfe000-f7c0d000 ---p 000e4000 fe:00 3207 /usr/lib/libsyslog-ng-4.7.so.0.0.0 f7c0d000-f7c10000 r--p 000e3000 fe:00 3207 /usr/lib/libsyslog-ng-4.7.so.0.0.0 f7c10000-f7c15000 rw-p 000e6000 fe:00 3207 /usr/lib/libsyslog-ng-4.7.so.0.0.0 f7c15000-f7c19000 rw-p 00000000 00:00 0 f7c19000-f7c1f000 r-xp 00000000 fe:00 3313 /usr/lib/libiconv.so.2.4.0 f7c1f000-f7c2e000 ---p 00006000 fe:00 3313 /usr/lib/libiconv.so.2.4.0 f7c2e000-f7c2f000 r--p 00005000 fe:00 3313 /usr/lib/libiconv.so.2.4.0 f7c2f000-f7c30000 rw-p 00006000 fe:00 3313 /usr/lib/libiconv.so.2.4.0 f7c30000-f7c53000 r-xp 00000000 fe:00 1222 /lib/ld-2.32.so f7c54000-f7c58000 rw-s 00000000 00:14 50088 /tmp/syslog-ng.persist f7c58000-f7c62000 rw-p 00000000 00:00 0 f7c62000-f7c63000 r--p 00022000 fe:00 1222 /lib/ld-2.32.so f7c63000-f7c64000 rw-p 00023000 fe:00 1222 /lib/ld-2.32.so ffaaf000-ffad0000 rw-p 00000000 00:00 0 [stack] ffff0000-ffff1000 r-xp 00000000 00:00 0 [vectors] (gdb) core-file core warning: Can't open file /usr/sbin/syslog-ng during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libsyslogformat.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libaffile.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libafsocket.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libconfgen.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libbasicfuncs.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libjson-plugin.so during file-backed mapping note processing warning: Can't open file /usr/lib/syslog-ng/libappmodel.so during file-backed mapping note processing warning: Can't open file /usr/lib/libcrypto.so.1.1.1 during file-backed mapping note processing warning: Can't open file /usr/lib/libssl.so.1.1.1 during file-backed mapping note processing warning: Can't open file /lib/libjson-c.so.5 during file-backed mapping note processing warning: Can't open file /lib/libc-2.32.so during file-backed mapping note processing warning: Can't open file /lib/libpthread-2.32.so during file-backed mapping note processing warning: Can't open file /lib/libdl-2.32.so during file-backed mapping note processing warning: Can't open file /usr/lib/libpcre2-8.so.0.11.2 during file-backed mapping note processing warning: Can't open file /usr/lib/libsecret-storage.so.0.0.0 during file-backed mapping note processing warning: Can't open file /usr/lib/libevtlog-4.7.so.0.0.0 during file-backed mapping note processing warning: Can't open file /usr/lib/libintl.so.8.1.1 during file-backed mapping note processing warning: Can't open file /usr/lib/libglib-2.0.so.0.5800.3 during file-backed mapping note processing warning: Can't open file /usr/lib/libgthread-2.0.so.0.5800.3 during file-backed mapping note processing warning: Can't open file /usr/lib/libgmodule-2.0.so.0.5800.3 during file-backed mapping note processing warning: Can't open file /lib/librt-2.32.so during file-backed mapping note processing warning: Can't open file /lib/libm-2.32.so during file-backed mapping note processing warning: Can't open file /usr/lib/libsyslog-ng-4.7.so.0.0.0 during file-backed mapping note processing warning: Can't open file /usr/lib/libiconv.so.2.4.0 during file-backed mapping note processing warning: Can't open file /lib/ld-2.32.so during file-backed mapping note processing warning: Can't open file /tmp/syslog-ng.persist during file-backed mapping note processing [New LWP 8050] Core was generated by `/usr/sbin/syslog-ng --foreground -f /etc/syslog-ng.conf --stderr'. Program terminated with signal SIGABRT, Aborted. #0 0xf777e68c in ?? ()
11-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值