68.4. Format

# mkfs.ext4 /dev/vg1/lv0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2621440 inodes, 10484736 blocks
524236 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

 




原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

uboot的build.log分析问题scripts/kconfig/conf --silentoldconfig Kconfig CHK include/config.h CFG u-boot.cfg GEN include/autoconf.mk GEN include/autoconf.mk.dep CFG spl/u-boot.cfg GEN spl/include/autoconf.mk CHK include/config/uboot.release CHK include/generated/version_autogenerated.h CHK include/generated/timestamp_autogenerated.h UPD include/generated/timestamp_autogenerated.h CC lib/asm-offsets.s CHK include/generated/generic-asm-offsets.h CC arch/arm/lib/asm-offsets.s CHK include/generated/asm-offsets.h HOSTCC tools/bmp_logo HOSTCC tools/gen_eth_addr HOSTCC tools/img2srec HOSTCC tools/mkenvimage.o HOSTCC tools/os_support.o WRAP tools/lib/crc32.c HOSTCC tools/lib/crc32.o HOSTLD tools/mkenvimage HOSTCC tools/aisimage.o HOSTCC tools/atmelimage.o WRAP tools/common/bootm.c HOSTCC tools/common/bootm.o HOSTCC tools/default_image.o WRAP tools/lib/fdtdec_common.c HOSTCC tools/lib/fdtdec_common.o WRAP tools/lib/fdtdec.c HOSTCC tools/lib/fdtdec.o HOSTCC tools/fit_common.o HOSTCC tools/fit_image.o WRAP tools/common/image-fit.c HOSTCC tools/common/image-fit.o HOSTCC tools/image-host.o WRAP tools/common/image.c HOSTCC tools/common/image.o HOSTCC tools/imagetool.o HOSTCC tools/imximage.o HOSTCC tools/kwbimage.o WRAP tools/lib/md5.c HOSTCC tools/lib/md5.o HOSTCC tools/lpc32xximage.o HOSTCC tools/mxsimage.o HOSTCC tools/omapimage.o HOSTCC tools/pblimage.o HOSTCC tools/pbl_crc32.o HOSTCC tools/vybridimage.o WRAP tools/lib/rc4.c HOSTCC tools/lib/rc4.o HOSTCC tools/rkcommon.o HOSTCC tools/rkimage.o HOSTCC tools/rksd.o HOSTCC tools/rkspi.o HOSTCC tools/socfpgaimage.o WRAP tools/lib/sha1.c HOSTCC tools/lib/sha1.o WRAP tools/lib/sha256.c HOSTCC tools/lib/sha256.o WRAP tools/common/hash.c HOSTCC tools/common/hash.o HOSTCC tools/ublimage.o HOSTCC tools/zynqimage.o HOSTCC tools/zynqmpimage.o WRAP tools/lib/libfdt/fdt.c HOSTCC tools/lib/libfdt/fdt.o WRAP tools/lib/libfdt/fdt_ro.c HOSTCC tools/lib/libfdt/fdt_ro.o WRAP tools/lib/libfdt/fdt_rw.c HOSTCC tools/lib/libfdt/fdt_rw.o WRAP tools/lib/libfdt/fdt_strerror.c HOSTCC tools/lib/libfdt/fdt_strerror.o WRAP tools/lib/libfdt/fdt_wip.c HOSTCC tools/lib/libfdt/fdt_wip.o WRAP tools/lib/libfdt/fdt_region.c HOSTCC tools/lib/libfdt/fdt_region.o WRAP tools/lib/libfdt/fdt_sw.c HOSTCC tools/lib/libfdt/fdt_sw.o HOSTCC tools/gpimage.o HOSTCC tools/gpimage-common.o HOSTCC tools/dumpimage.o HOSTLD tools/dumpimage HOSTCC tools/mkimage.o HOSTLD tools/mkimage HOSTCC tools/mksunxiboot HOSTCC tools/proftool HOSTCC tools/fdtgrep.o HOSTLD tools/fdtgrep tools/bmp_logo --gen-info ./tools/logos/denx.bmp > include/bmp_logo.h tools/bmp_logo --gen-data ./tools/logos/denx.bmp > include/bmp_logo_data.h LD arch/arm/cpu/built-in.o CC arch/arm/cpu/armv7/cache_v7.o AS arch/arm/cpu/armv7/cache_v7_asm.o CC arch/arm/cpu/armv7/cpu.o CC arch/arm/cpu/armv7/cp15.o CC arch/arm/cpu/armv7/syslib.o AS arch/arm/cpu/armv7/lowlevel_init.o CC arch/arm/cpu/armv7/sunxi/timer.o LD arch/arm/cpu/armv7/sunxi/built-in.o LD arch/arm/cpu/armv7/built-in.o AS arch/arm/cpu/armv7/start.o AS arch/arm/lib/vectors.o AS arch/arm/lib/crt0.o AS arch/arm/lib/relocate.o CC arch/arm/lib/bootm-fdt.o CC arch/arm/lib/bootm.o CC arch/arm/lib/zimage.o CC arch/arm/lib/sections.o CC arch/arm/lib/stack.o CC arch/arm/lib/interrupts.o CC arch/arm/lib/reset.o CC arch/arm/lib/cache.o CC arch/arm/lib/cache-cp15.o CC arch/arm/lib/psci-dt.o LD arch/arm/lib/built-in.o AS arch/arm/lib/ashldi3.o AS arch/arm/lib/ashrdi3.o CC arch/arm/lib/div0.o AS arch/arm/lib/div64.o AS arch/arm/lib/lib1funcs.o AS arch/arm/lib/lshrdi3.o AS arch/arm/lib/muldi3.o AS arch/arm/lib/uldivmod.o AR arch/arm/lib/lib.a CC arch/arm/lib/eabi_compat.o AS arch/arm/lib/crt0_arm_efi.o CC arch/arm/lib/reloc_arm_efi.o CC arch/arm/mach-sunxi/board.o CC arch/arm/mach-sunxi/clock.o CC arch/arm/mach-sunxi/cpu_info.o CC arch/arm/mach-sunxi/dram_helpers.o CC arch/arm/mach-sunxi/pinmux.o CC arch/arm/mach-sunxi/usb_phy.o CC arch/arm/mach-sunxi/prcm.o CC arch/arm/mach-sunxi/rsb.o CC arch/arm/mach-sunxi/clock_sun6i.o LD arch/arm/mach-sunxi/built-in.o CC board/sunxi/board.o LD board/sunxi/built-in.o CC cmd/boot.o CC cmd/bootm.o CC cmd/help.o CC cmd/version.o CC cmd/source.o CC cmd/bdinfo.o CC cmd/bootefi.o CC cmd/bootmenu.o CC cmd/bootz.o CC cmd/console.o CC cmd/echo.o CC cmd/elf.o CC cmd/exit.o CC cmd/ext4.o CC cmd/ext2.o CC cmd/fat.o CC cmd/fdt.o CC cmd/fs.o CC cmd/gpio.o CC cmd/itest.o CC cmd/load.o CC cmd/mem.o CC cmd/mii.o CC cmd/misc.o CC cmd/mmc.o CC cmd/net.o CC cmd/part.o CC cmd/pcmcia.o CC cmd/pxe.o CC cmd/setexpr.o CC cmd/test.o CC cmd/usb.o CC cmd/disk.o CC cmd/ximg.o CC cmd/nvedit.o LD cmd/built-in.o CC common/init/board_init.o LD common/init/built-in.o CC common/main.o CC common/exports.o CC common/hash.o CC common/cli_hush.o CC common/autoboot.o CC common/board_f.o CC common/board_r.o CC common/board_info.o CC common/bootm.o CC common/bootm_os.o CC common/env_attr.o CC common/env_callback.o CC common/env_flags.o CC common/env_mmc.o CC common/fdt_support.o CC common/miiphyutil.o CC common/usb.o CC common/usb_hub.o CC common/usb_storage.o CC common/flash.o CC common/edid.o CC common/splash.o CC common/menu.o CC common/usb_kbd.o CC common/env_common.o CC common/console.o CC common/dlmalloc.o CC common/malloc_simple.o CC common/image.o CC common/image-fdt.o CC common/memsize.o CC common/stdio.o CC common/cli_simple.o CC common/cli.o CC common/cli_readline.o CC common/command.o CC common/s_record.o CC common/xyzModem.o LD common/built-in.o CC disk/part.o CC disk/part_dos.o CC disk/part_iso.o CC disk/part_efi.o LD disk/built-in.o LD drivers/adc/built-in.o CC drivers/block/blk_legacy.o LD drivers/block/built-in.o CC drivers/core/device.o CC drivers/core/lists.o CC drivers/core/root.o CC drivers/core/uclass.o CC drivers/core/util.o CC drivers/core/device-remove.o CC drivers/core/simple-bus.o CC drivers/core/dump.o LD drivers/core/built-in.o CC drivers/crypto/fsl/sec.o LD drivers/crypto/fsl/built-in.o LD drivers/crypto/rsa_mod_exp/built-in.o LD drivers/crypto/built-in.o LD drivers/dfu/built-in.o LD drivers/hwmon/built-in.o CC drivers/input/keyboard-uclass.o CC drivers/input/input.o CC drivers/input/key_matrix.o LD drivers/input/built-in.o LD drivers/mailbox/built-in.o LD drivers/memory/built-in.o LD drivers/misc/built-in.o CC drivers/pcmcia/tqm8xx_pcmcia.o LD drivers/pcmcia/built-in.o LD drivers/phy/marvell/built-in.o LD drivers/pwm/built-in.o LD drivers/reset/built-in.o CC drivers/rtc/date.o LD drivers/rtc/built-in.o LD drivers/soc/built-in.o LD drivers/sound/built-in.o LD drivers/spmi/built-in.o LD drivers/sysreset/built-in.o LD drivers/thermal/built-in.o LD drivers/timer/built-in.o LD drivers/tpm/built-in.o LD drivers/twserial/built-in.o CC drivers/video/cfb_console.o CC drivers/video/sunxi_display.o CC drivers/video/videomodes.o LD drivers/video/bridge/built-in.o LD drivers/video/built-in.o LD drivers/watchdog/built-in.o LD drivers/built-in.o LD drivers/dma/built-in.o CC drivers/gpio/gpio-uclass.o CC drivers/gpio/sunxi_gpio.o LD drivers/gpio/built-in.o LD drivers/i2c/built-in.o CC drivers/mmc/mmc_legacy.o CC drivers/mmc/mmc.o CC drivers/mmc/sunxi_mmc.o CC drivers/mmc/mmc_write.o LD drivers/mmc/built-in.o LD drivers/mtd/built-in.o LD drivers/mtd/onenand/built-in.o LD drivers/mtd/spi/built-in.o LD drivers/net/built-in.o LD drivers/net/phy/built-in.o LD drivers/pci/built-in.o LD drivers/power/built-in.o LD drivers/power/battery/built-in.o LD drivers/power/domain/built-in.o LD drivers/power/fuel_gauge/built-in.o LD drivers/power/mfd/built-in.o LD drivers/power/pmic/built-in.o LD drivers/power/regulator/built-in.o CC drivers/serial/serial-uclass.o CC drivers/serial/ns16550.o LD drivers/serial/built-in.o CC drivers/spi/spi.o LD drivers/spi/built-in.o CC drivers/usb/common/common.o LD drivers/usb/common/built-in.o LD drivers/usb/dwc3/built-in.o LD drivers/usb/emul/built-in.o LD drivers/usb/eth/built-in.o LD drivers/usb/gadget/built-in.o LD drivers/usb/gadget/udc/built-in.o CC drivers/usb/host/usb-uclass.o LD drivers/usb/host/built-in.o LD drivers/usb/musb-new/built-in.o LD drivers/usb/musb/built-in.o LD drivers/usb/phy/built-in.o LD drivers/usb/ulpi/built-in.o CC fs/fs.o CC fs/ext4/ext4fs.o CC fs/ext4/ext4_common.o CC fs/ext4/dev.o LD fs/ext4/built-in.o CC fs/fat/fat_write.o CC fs/fat/file.o LD fs/fat/built-in.o LD fs/built-in.o CC lib/efi_loader/efi_image_loader.o CC lib/efi_loader/efi_boottime.o CC lib/efi_loader/efi_runtime.o CC lib/efi_loader/efi_console.o CC lib/efi_loader/efi_memory.o CC lib/efi_loader/efi_disk.o CC lib/efi_loader/efi_net.o CC lib/efi_loader/efi_smbios.o LD lib/efi_loader/built-in.o CC lib/efi_loader/helloworld.o arm-linux-gnueabihf-ld.bfd -nostdlib -znocombreloc -T ./arch/arm/lib/elf_arm_efi.lds -shared -Bsymbolic \ lib/efi_loader/helloworld.o arch/arm/lib/crt0_arm_efi.o arch/arm/lib/reloc_arm_efi.o arch/arm/lib/elf_arm_efi.lds -o lib/efi_loader/helloworld.so arm-linux-gnueabihf-objcopy -j .header -j .text -j .sdata -j .data -j .dynamic \ -j .dynsym -j .rel* -j .rela* -j .reloc \ -O binary lib/efi_loader/helloworld.so lib/efi_loader/helloworld.efi CC lib/libfdt/fdt.o CC lib/libfdt/fdt_ro.o CC lib/libfdt/fdt_rw.o CC lib/libfdt/fdt_strerror.o CC lib/libfdt/fdt_sw.o CC lib/libfdt/fdt_wip.o CC lib/libfdt/fdt_empty_tree.o CC lib/libfdt/fdt_addresses.o CC lib/libfdt/fdt_region.o CC lib/libfdt/fdt_overlay.o LD lib/libfdt/built-in.o CC lib/zlib/zlib.o LD lib/zlib/built-in.o CC lib/crc7.o CC lib/crc8.o CC lib/crc16.o CC lib/gunzip.o CC lib/smbios.o CC lib/initcall.o CC lib/lmb.o CC lib/ldiv.o CC lib/net_utils.o CC lib/qsort.o CC lib/rc4.o CC lib/list_sort.o CC lib/fdtdec_common.o CC lib/fdtdec.o CC lib/hashtable.o CC lib/errno.o CC lib/display_options.o CC lib/crc32.o CC lib/ctype.o CC lib/div64.o CC lib/hang.o CC lib/linux_compat.o CC lib/linux_string.o CC lib/membuff.o CC lib/slre.o CC lib/string.o CC lib/tables_csum.o CC lib/time.o CC lib/uuid.o CC lib/vsprintf.o CC lib/panic.o CC lib/strto.o CC lib/strmhz.o LD lib/built-in.o CC net/checksum.o CC net/arp.o CC net/bootp.o CC net/eth-uclass.o CC net/eth_common.o CC net/net.o CC net/nfs.o CC net/ping.o CC net/tftp.o LD net/built-in.o LD test/built-in.o CC test/dm/cmd_dm.o LD test/dm/built-in.o CC examples/standalone/stubs.o LD examples/standalone/libstubs.o CC examples/standalone/hello_world.o LD examples/standalone/hello_world OBJCOPY examples/standalone/hello_world.srec OBJCOPY examples/standalone/hello_world.bin LDS u-boot.lds LD u-boot DTC arch/arm/dts/sun8i-v3s-licheepi-zero.dtb ./arch/arm/dts/sun8i-v3s.dtsi:211.26-215.6: Warning (unit_address_vs_reg): /soc/pinctrl@01c20800/uart0@0: node has a unit name, but no reg or ranges property ./arch/arm/dts/sun8i-v3s.dtsi:217.24-223.6: Warning (unit_address_vs_reg): /soc/pinctrl@01c20800/mmc0@0: node has a unit name, but no reg or ranges property ./arch/arm/dts/sunxi-common-regulators.dtsi:49.33-54.4: Warning (unit_address_vs_reg): /soc/pinctrl@01c20800/ahci_pwr_pin@0: node has a unit name, but no reg or ranges property ./arch/arm/dts/sunxi-common-regulators.dtsi:56.35-61.4: Warning (unit_address_vs_reg): /soc/pinctrl@01c20800/usb0_vbus_pin@0: node has a unit name, but no reg or ranges property ./arch/arm/dts/sunxi-common-regulators.dtsi:63.35-68.4: Warning (unit_address_vs_reg): /soc/pinctrl@01c20800/usb1_vbus_pin@0: node has a unit name, but no reg or ranges property ./arch/arm/dts/sunxi-common-regulators.dtsi:70.35-75.4: Warning (unit_address_vs_reg): /soc/pinctrl@01c20800/usb2_vbus_pin@0: node has a unit name, but no reg or ranges property ./arch/arm/dts/sun8i-v3s.dtsi:99.22-116.5: Warning (simple_bus_reg): /soc/mmc@01c0f000: simple-bus unit address format error, expected "1c0f000" also defined at <stdin>:61.7-68.3 ./arch/arm/dts/sun8i-v3s.dtsi:118.22-135.5: Warning (simple_bus_reg): /soc/mmc@01c10000: simple-bus unit address format error, expected "1c10000" ./arch/arm/dts/sun8i-v3s.dtsi:137.22-154.5: Warning (simple_bus_reg): /soc/mmc@01c11000: simple-bus unit address format error, expected "1c11000" ./arch/arm/dts/sun8i-v3s.dtsi:156.25-167.5: Warning (simple_bus_reg): /soc/usb@01c19000: simple-bus unit address format error, expected "1c19000" also defined at <stdin>:76.10-79.3 ./arch/arm/dts/sun8i-v3s.dtsi:169.24-181.5: Warning (simple_bus_reg): /soc/phy@01c19400: simple-bus unit address format error, expected "1c19400" also defined at <stdin>:81.9-84.3 ./arch/arm/dts/sun8i-v3s.dtsi:183.23-190.5: Warning (simple_bus_reg): /soc/clock@01c20000: simple-bus unit address format error, expected "1c20000" ./arch/arm/dts/sun8i-v3s.dtsi:192.21-197.5: Warning (simple_bus_reg): /soc/rtc@01c20400: simple-bus unit address format error, expected "1c20400" ./arch/arm/dts/sun8i-v3s.dtsi:199.25-224.5: Warning (simple_bus_reg): /soc/pinctrl@01c20800: simple-bus unit address format error, expected "1c20800" also defined at ./arch/arm/dts/sunxi-common-regulators.dtsi:48.6-76.3 ./arch/arm/dts/sun8i-v3s.dtsi:226.18-232.5: Warning (simple_bus_reg): /soc/timer@01c20c00: simple-bus unit address format error, expected "1c20c00" ./arch/arm/dts/sun8i-v3s.dtsi:234.27-238.5: Warning (simple_bus_reg): /soc/watchdog@01c20ca0: simple-bus unit address format error, expected "1c20ca0" ./arch/arm/dts/sun8i-v3s.dtsi:240.26-249.5: Warning (simple_bus_reg): /soc/serial@01c28000: simple-bus unit address format error, expected "1c28000" also defined at <stdin>:70.8-74.3 ./arch/arm/dts/sun8i-v3s.dtsi:251.26-260.5: Warning (simple_bus_reg): /soc/serial@01c28400: simple-bus unit address format error, expected "1c28400" ./arch/arm/dts/sun8i-v3s.dtsi:262.26-271.5: Warning (simple_bus_reg): /soc/serial@01c28800: simple-bus unit address format error, expected "1c28800" ./arch/arm/dts/sun8i-v3s.dtsi:273.38-282.5: Warning (simple_bus_reg): /soc/interrupt-controller@01c81000: simple-bus unit address format error, expected "1c81000" SHIPPED dts/dt.dtb CC spl/arch/arm/mach-sunxi/board.o CC spl/arch/arm/mach-sunxi/clock.o CC spl/arch/arm/mach-sunxi/cpu_info.o CC spl/arch/arm/mach-sunxi/dram_helpers.o CC spl/arch/arm/mach-sunxi/pinmux.o CC spl/arch/arm/mach-sunxi/usb_phy.o CC spl/arch/arm/mach-sunxi/prcm.o CC spl/arch/arm/mach-sunxi/rsb.o CC spl/arch/arm/mach-sunxi/clock_sun6i.o CC spl/arch/arm/mach-sunxi/dram_sun8i_h3.o LD spl/arch/arm/mach-sunxi/built-in.o CC spl/arch/arm/cpu/armv7/cache_v7.o AS spl/arch/arm/cpu/armv7/cache_v7_asm.o CC spl/arch/arm/cpu/armv7/cpu.o CC spl/arch/arm/cpu/armv7/cp15.o CC spl/arch/arm/cpu/armv7/syslib.o AS spl/arch/arm/cpu/armv7/lowlevel_init.o CC spl/arch/arm/cpu/armv7/sunxi/timer.o AS spl/arch/arm/cpu/armv7/sunxi/fel_utils.o LD spl/arch/arm/cpu/armv7/sunxi/built-in.o LD spl/arch/arm/cpu/armv7/built-in.o AS spl/arch/arm/cpu/armv7/start.o LD spl/arch/arm/cpu/built-in.o AS spl/arch/arm/lib/vectors.o AS spl/arch/arm/lib/crt0.o CC spl/arch/arm/lib/spl.o CC spl/arch/arm/lib/zimage.o CC spl/arch/arm/lib/sections.o CC spl/arch/arm/lib/stack.o CC spl/arch/arm/lib/interrupts.o CC spl/arch/arm/lib/reset.o CC spl/arch/arm/lib/cache.o CC spl/arch/arm/lib/cache-cp15.o CC spl/arch/arm/lib/psci-dt.o LD spl/arch/arm/lib/built-in.o AS spl/arch/arm/lib/ashldi3.o AS spl/arch/arm/lib/ashrdi3.o CC spl/arch/arm/lib/div0.o AS spl/arch/arm/lib/div64.o AS spl/arch/arm/lib/lib1funcs.o AS spl/arch/arm/lib/lshrdi3.o AS spl/arch/arm/lib/muldi3.o AS spl/arch/arm/lib/uldivmod.o AR spl/arch/arm/lib/lib.a CC spl/arch/arm/lib/eabi_compat.o AS spl/arch/arm/lib/crt0_arm_efi.o CC spl/arch/arm/lib/reloc_arm_efi.o CC spl/board/sunxi/board.o LD spl/board/sunxi/built-in.o CC spl/common/spl/spl.o CC spl/common/spl/spl_mmc.o LD spl/common/spl/built-in.o CC spl/common/init/board_init.o LD spl/common/init/built-in.o CC spl/common/env_common.o CC spl/common/console.o CC spl/common/dlmalloc.o CC spl/common/malloc_simple.o CC spl/common/image.o CC spl/common/memsize.o CC spl/common/stdio.o CC spl/common/cli_simple.o CC spl/common/cli.o CC spl/common/cli_readline.o CC spl/common/command.o CC spl/common/s_record.o CC spl/common/xyzModem.o LD spl/common/built-in.o CC spl/cmd/nvedit.o LD spl/cmd/built-in.o CC spl/lib/hashtable.o CC spl/lib/errno.o CC spl/lib/display_options.o CC spl/lib/crc32.o CC spl/lib/ctype.o CC spl/lib/div64.o CC spl/lib/hang.o CC spl/lib/linux_compat.o CC spl/lib/linux_string.o CC spl/lib/membuff.o CC spl/lib/slre.o CC spl/lib/string.o CC spl/lib/tables_csum.o CC spl/lib/time.o CC spl/lib/tiny-printf.o CC spl/lib/panic.o CC spl/lib/strto.o LD spl/lib/built-in.o CC spl/disk/part.o LD spl/disk/built-in.o CC spl/drivers/block/blk_legacy.o LD spl/drivers/block/built-in.o CC spl/drivers/gpio/sunxi_gpio.o LD spl/drivers/gpio/built-in.o CC spl/drivers/mmc/mmc_legacy.o CC spl/drivers/mmc/mmc.o CC spl/drivers/mmc/sunxi_mmc.o LD spl/drivers/mmc/built-in.o LD spl/drivers/power/built-in.o LD spl/drivers/power/pmic/built-in.o LD spl/drivers/power/regulator/built-in.o CC spl/drivers/serial/serial.o CC spl/drivers/serial/serial_ns16550.o CC spl/drivers/serial/ns16550.o LD spl/drivers/serial/built-in.o LD spl/drivers/built-in.o LD spl/dts/built-in.o LD spl/fs/built-in.o LDS spl/u-boot-spl.lds LD spl/u-boot-spl OBJCOPY spl/u-boot-spl-nodtb.bin COPY spl/u-boot-spl.bin MKSUNXI spl/sunxi-spl.bin OBJCOPY u-boot-nodtb.bin CAT u-boot-dtb.bin COPY u-boot.bin MKIMAGE u-boot.img COPY u-boot.dtb BINMAN u-boot-sunxi-with-spl.bin
05-29
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"> <title>黑马点评</title> <!-- 引入样式 --> <link rel="stylesheet" href="./css/element.css"> <link href="./css/blog-detail.css" rel="stylesheet"> <link href="./css/main.css" rel="stylesheet"> <style type="text/tailwindcss"> @layer utilities { .content-auto { content-visibility: auto; } .comment-input { @apply w-full min-h-[120px] border border-gray-300 text-lg leading-relaxed resize-none outline-none bg-white mb-3 px-4 py-3 rounded-lg transition-all duration-300; } .comment-input:focus { @apply border-primary ring-1 ring-primary/20; } .comment-input::placeholder { @apply text-gray-400; } .comment-box { @apply flex p-4 border-b border-gray-100; } .comment-icon { @apply w-10 h-10 rounded-full overflow-hidden mr-3 flex-shrink-0; } .comment-icon img { @apply w-full h-full object-cover; } .comment-user { @apply font-medium text-gray-800; } .comment-info { @apply flex-1; } .send-btn { @apply bg-primary hover:bg-primary/90 text-white px-6 py-2 rounded-full transition-all duration-300 disabled:opacity-50 disabled:cursor-not-allowed; } } </style> <style> .header { position: relative; } .foot-view span { font-size: 12px; } .liked { color: #ff6633; } /* 评论输入框样式 */ .comment-container { position: fixed; bottom: 0; left: 0; right: 0; height: 0; background-color: white; z-index: 150; display: flex; flex-direction: column; box-shadow: -2px -2px 10px rgba(0,0,0,0.05); transition: height 0.3s cubic-bezier(0.34, 1.56, 0.64, 1); } .comment-container.active { height: 60%; /* 增加评论容器高度 */ } .comment-header { height: 56px; padding: 0 16px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #E5E7EB; } .comment-header .cancel-btn { color: #6B7280; font-size: 16px; background: none; border: none; cursor: pointer; } .comment-header .send-btn { color: white; background-color: #FF7A00; border: 1px solid #FF7A00; /* 橙色边框 */ padding: 8px 16px; border-radius: 20px; font-size: 14px; font-weight: 500; transition: background-color 0.2s; } .comment-header .send-btn:hover { background-color: #FF6600; border-color: #FF6600; /* 悬停时边框颜色加深 */ } .comment-content { padding: 16px; display: flex; flex-direction: column; height: 100%; } /* 新增样式 */ .loading { display: flex; justify-content: center; align-items: center; height: 40px; color: #9CA3AF; } .empty-comment { text-align: center; padding: 20px 0; color: #9CA3AF; font-size: 14px; } .load-more { display: flex; justify-content: center; align-items: center; padding: 15px 0; color: #6B7280; font-size: 14px; cursor: pointer; } </style> </head> <body> <div id="app"> <div class="header"> <div class="header-back-btn" @click="goBack"><i class="el-icon-arrow-left"></i></div> <div class="header-title"></div> <div class="header-share">...</div> </div> <div style="height: 85%; overflow-y: scroll; overflow-x: hidden"> <div class="blog-info-box" ref="swiper" @touchstart="moveStart" @touchmove="moving" @touchend="moveEnd"> <div class="swiper-item" v-for="(img, i) in blog.images" :key="i"> <img :src="img" alt="" style="width: 100%" height="100%"> </div> </div> <div class="basic"> <div class="basic-icon" @click="toOtherInfo"> <img :src="blog.icon || '/imgs/icons/default-icon.png'" alt="用户头像"> </div> <div class="basic-info"> <div class="name">{{blog.name}}</div> <span class="time">{{formatTime(new Date(blog.createTime))}}</span> </div> <div style="width: 20%"> <div class="logout-btn" @click="follow" v-show="!user || user.id !== blog.userId "> {{followed ? '取消关注' : '关注'}} </div> </div> </div> <div class="blog-text" v-html="blog.content"> </div> <div class="shop-basic"> <div class="shop-icon"> <img :src="shop.image" alt="店铺图片"> </div> <div style="width: 80%"> <div class="name">{{shop.name}}</div> <div> <el-rate v-model="shop.score/10"> </el-rate> </div> <div class="shop-avg">¥{{shop.avgPrice}}/人</div> </div> </div> <div class="zan-box"> <div> <svg t="1646634642977" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2187" width="20" height="20"> <path d="M160 944c0 8.8-7.2 16-16 16h-32c-26.5 0-48-21.5-48-48V528c0-26.5 21.5-48 48-48h32c8.8 0 16 7.2 16 16v448zM96 416c-53 0-96 43-96 96v416c0 53 43 96 96 96h96c17.7 0 32-14.3 32-32V448c0-17.7-14.3-32-32-32H96zM505.6 64c16.2 0 26.4 8.7 31 13.9 4.6 5.2 12.1 16.3 10.3 32.4l-23.5 203.4c-4.9 42.2 8.6 84.6 36.8 116.4 28.3 31.7 68.9 49.9 111.4 49.9h271.2c6.6 0 10.8 3.3 13.2 6.1s5 7.5 4 14l-48 303.4c-6.9 43.6-29.1 83.4-62.7 112C815.8 944.2 773 960 728.9 960h-317c-33.1 0-59.9-26.8-59.9-59.9v-455c0-6.1 1.7-12 5-17.1 69.5-109 106.4-234.2 107-364h41.6z m0-64h-44.9C427.2 0 400 27.2 400 60.7c0 127.1-39.1 251.2-112 355.3v484.1c0 68.4 55.5 123.9 123.9 123.9h317c122.7 0 227.2-89.3 246.3-210.5l47.9-303.4c7.8-49.4-30.4-94.1-80.4-94.1H671.6c-50.9 0-90.5-44.4-84.6-95l23.5-203.4C617.7 55 568.7 0 505.6 0z" p-id="2188" :fill="blog.isLike ? '#ff6633' : '#82848a'"></path> </svg> </div> <div class="zan-list"> <div class="user-icon-mini" v-for="u in likes" :key="u.id"> <img :src="u.icon || '/imgs/icons/default-icon.png'" alt="点赞用户头像"> </div> <div style="margin-left:10px;text-align: center;line-height: 24px;">{{blog.liked}}人点赞</div> </div> </div> <div class="blog-divider"></div> <div class="blog-comments"> <div class="comments-head"> <div>网友评价 <span>{{totalComments}}条</span></div> <div @click="loadMoreComments" v-if="hasMore && !isLoading"> <i class="el-icon-arrow-right"></i> </div> <div v-else-if="isLoading"> <i class="el-icon-loading is-spinning"></i> 加载中... </div> <div v-else>没有更多评论了</div> </div> <!-- 加载状态 --> <div v-if="isLoading && comments.length === 0" class="loading"> <i class="el-icon-loading is-spinning"></i> <span>加载评论中...</span> </div> <!-- 空评论状态 --> <div v-else-if="comments.length === 0 && !isLoading" class="empty-comment"> 暂无评论,快来发表第一条评论吧 </div> <!-- 评论列表 --> <div class="comment-list" v-else> <div class="comment-box" v-for="comment in comments" :key="comment.id"> <div class="comment-icon"> <img :src="comment.icon || '/imgs/icons/default-icon.png'" alt="评论用户头像"> </div> <div class="comment-info"> <div class="comment-user"> {{comment.name}} <span v-if="comment.level">Lv{{comment.level}}</span> </div> <div style="padding: 5px 0; font-size: 14px"> {{comment.content}} </div> <div style="display: flex; justify-content: space-between; align-items: center; margin-top: 5px; color: #999;"> <div>{{formatCommentTime(comment.createTime)}}</div> </div> </div> </div> <!-- 加载更多按钮 --> <div v-if="hasMore && !isLoading" class="load-more" @click="loadMoreComments"> 查看更多评论 <i class="el-icon-arrow-down"></i> </div> </div> </div> <div class="blog-divider"></div> </div> <div class="foot"> <div class="foot-box"> <div class="foot-view" @click="addLike()"> <svg t="1646634642977" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2187" width="26" height="26"> <path d="M160 944c0 8.8-7.2 16-16 16h-32c-26.5 0-48-21.5-48-48V528c0-26.5 21.5-48 48-48h32c8.8 0 16 7.2 16 16v448zM96 416c-53 0-96 43-96 96v416c0 53 43 96 96 96h96c17.7 0 32-14.3 32-32V448c0-17.7-14.3-32-32-32H96zM505.6 64c16.2 0 26.4 8.7 31 13.9 4.6 5.2 12.1 16.3 10.3 32.4l-23.5 203.4c-4.9 42.2 8.6 84.6 36.8 116.4 28.3 31.7 68.9 49.9 111.4 49.9h271.2c6.6 0 10.8 3.3 13.2 6.1s5 7.5 4 14l-48 303.4c-6.9 43.6-29.1 83.4-62.7 112C815.8 944.2 773 960 728.9 960h-317c-33.1 0-59.9-26.8-59.9-59.9v-455c0-6.1 1.7-12 5-17.1 69.5-109 106.4-234.2 107-364h41.6z m0-64h-44.9C427.2 0 400 27.2 400 60.7c0 127.1-39.1 251.2-112 355.3v484.1c0 68.4 55.5 123.9 123.9 123.9h317c122.7 0 227.2-89.3 246.3-210.5l47.9-303.4c7.8-49.4-30.4-94.1-80.4-94.1H671.6c-50.9 0-90.5-44.4-84.6-95l23.5-203.4C617.7 55 568.7 0 505.6 0z" p-id="2188" :fill="blog.isLike ? '#ff6633' : '#82848a'"></path> </svg> <span :class="{liked: blog.isLike}">{{blog.liked}}</span> </div> </div> <div style="width: 40%"> </div> <div class="foot-box"> <div class="foot-view" @click="showCommentBox"> <i class="el-icon-chat-square"></i> </div> </div> </div> <!-- 评论输入框 --> <div class="comment-container" ref="commentContainer"> <div class="comment-header"> <button class="cancel-btn" @click="hideCommentBox">取消</button> <h3>评论</h3> <button class="send-btn" @click="sendComment" :disabled="!commentText.trim()">发送</button> </div> <div class="comment-content"> <textarea class="comment-input" v-model="commentText" placeholder="输入评论内容..." ref="commentInput"></textarea> </div> </div> </div> <script src="./js/vue.js"></script> <script src="./js/axios.min.js"></script> <!-- 引入组件库 --> <script src="./js/element.js"></script> <script src="./js/common.js"></script> <script> let each = function (ary, callback) { for (let i = 0, l = ary.length; i < l; i++) { if (callback(ary[i], i) === false) break } } const app = new Vue({ el: "#app", data: { util, blog: {}, shop: {}, likes: [], user: {}, // 登录用户 followed: false, // 是否关注了 _width: 0, duration: 300, container: null, items: [], active: 0, start: { x: 0, y: 0 }, move: { x: 0, y: 0 }, sensitivity: 60, resistance: 0.3, commentText: '', // 评论内容 commentContainer: null, // 评论相关数据 comments: [], // 当前页评论列表 totalComments: 0, // 评论总数 currentPage: 1, // 当前页码 pageSize: 10, // 每页大小 hasMore: false, // 是否有更多数据 isLoading: false, // 是否正在加载 }, created() { let id = util.getUrlParam("id"); this.queryBlogById(id); this.fetchComments(id); }, mounted() { this.commentContainer = this.$refs.commentContainer; }, methods: { init() { // 获得父容器节点 this.container = this.$refs.swiper // 获得所有的子节点 this.items = this.container.querySelectorAll('.swiper-item') this.updateItemWidth() this.setTransform() this.setTransition('none') }, goBack() { history.back(); }, toOtherInfo(){ if(this.blog.userId === this.user.id){ location.href = "/info.html" }else{ location.href = "/other-info.html?id=" + this.blog.userId } }, queryBlogById(id) { axios.get("/blog/" + id) .then(({data}) => { data.images = data.images.split(",") this.blog = data; this.$nextTick(this.init); this.queryShopById(data.shopId) this.queryLikeList(id); this.queryLoginUser(); }) .catch(this.$message.error) }, queryShopById(shopId) { axios.get("/shop/" + shopId) .then(({data}) => { data.image = data.images.split(",")[0] this.shop = data }) .catch(this.$message.error) }, queryLikeList(id){ axios.get("/blog/likes/" + id) .then(({data}) => this.likes = data) .catch(this.$message.error) }, addLike(){ axios.put("/blog/like/" +this.blog.id) .then(({data}) => { axios.get("/blog/" + this.blog.id) .then(({data}) => { data.images = data.images.split(",") this.blog = data; this.queryLikeList(this.blog.id); }) .catch(this.$message.error) }) .catch(err => { this.$message.error(err) }) }, isFollowed(){ axios.get("/follow/or/not/" + this.blog.userId) .then(({data}) => this.followed = data) .catch(this.$message.error) }, follow(){ axios.put("/follow/" + this.blog.userId + "/" + !this.followed) .then(() => { this.$message.success(this.followed ? "已取消关注" : "已关注") this.followed = !this.followed }) .catch(this.$message.error) }, formatTime(b) { return b.getFullYear() + "年" + (b.getMonth() + 1) + "月" + b.getDate() + "日 "; }, formatMinutes(m) { if (m < 10) m = "0" + m return m; }, queryLoginUser(){ // 查询用户信息 axios.get("/user/me") .then(({ data }) => { // 保存用户 this.user = data; if(this.user.id !== this.blog.userId){ this.isFollowed(); } }) .catch(console.log) }, // 轮播图相关方法 updateItemWidth() { this._width = this.container.offsetWidth || document.documentElement.offsetWidth }, setTransform(offset) { offset = offset || 0 each(this.items, (item, i) => { let distance = (i - this.active) * this._width + offset let transform = `translate3d(${distance}px, 0, 0)` item.style.webkitTransform = transform item.style.transform = transform }) }, setTransition(duration) { duration = duration || this.duration duration = typeof duration === 'number' ? (duration + 'ms') : duration each(this.items, (item) => { item.style.webkitTransition = duration item.style.transition = duration }) }, moveStart(e) { this.start.x = e.changedTouches[0].pageX this.start.y = e.changedTouches[0].pageY this.setTransition('none') }, moving(e) { e.preventDefault() e.stopPropagation() let distanceX = e.changedTouches[0].pageX - this.start.x let distanceY = e.changedTouches[0].pageY - this.start.y if (Math.abs(distanceX) > Math.abs(distanceY)) { this.isMoving = true this.move.x = this.start.x + distanceX this.move.y = this.start.y + distanceY if ((this.active === 0 && distanceX > 0) || (this.active === (this.items.length - 1) && distanceX < 0)) { distanceX = distanceX * this.resistance } this.setTransform(distanceX) } }, moveEnd(e) { if (this.isMoving) { e.preventDefault() e.stopPropagation() let distance = this.move.x - this.start.x if (Math.abs(distance) > this.sensitivity) { if (distance < 0) { this.next() } else { this.prev() } } else { this.back() } this.reset() this.isMoving = false; } }, next() { let index = this.active + 1 this.go(index) }, prev() { let index = this.active - 1 this.go(index) }, reset() { this.start.x = 0 this.start.y = 0 this.move.x = 0 this.move.y = 0 }, back() { this.setTransition() this.setTransform() }, destroy() { this.setTransition('none') }, go(index) { this.active = index if (this.active < 0) { this.active = 0 } else if (this.active > this.items.length - 1) { this.active = this.items.length - 1 } this.$emit('change', this.active) this.setTransition() this.setTransform() }, // 评论相关方法 showCommentBox() { if (!this.user.id) { this.$message.warning("请先登录"); return; } this.commentContainer.classList.add('active'); setTimeout(() => { this.$refs.commentInput.focus(); }, 300); }, hideCommentBox() { this.commentContainer.classList.remove('active'); this.commentText = ''; }, sendComment() { const content = this.commentText.trim(); if (content) { // 使用FormData格式,与后端接口参数匹配 const formData = new FormData(); formData.append('comment', content); formData.append('blogId', this.blog.id); axios.post("/blog-comments", formData) .then(() => { this.$message.success("评论发送成功"); this.hideCommentBox(); this.commentText = ''; // 刷新第一页评论 this.fetchComments(this.blog.id, 1); }) .catch(err => { this.$message.error("评论发送失败: " + err.response?.data?.message || err.message); console.error(err); }); } else { this.$message.warning("请输入评论内容"); } }, // 获取评论列表 - 适配后端分页接口 fetchComments(blogId, page = 1) { // 如果是加载第一页,清空现有评论 if (page === 1) { this.comments = []; } this.isLoading = true; axios.get(`/blog-comments/${blogId}`, { params: { page: page, size: this.pageSize } }) .then((response) => { // 确保响应数据存在 if (!response.data) { this.$message.warning("评论数据为空"); this.hasMore = false; this.isLoading = false; return; } const pageResult = response.data; // 验证必要字段存在 if (pageResult.records === undefined || pageResult.totalRecords === undefined) { this.$message.warning("评论数据格式异常,缺少必要字段"); this.hasMore = false; this.isLoading = false; return; } // 更新评论列表 if (page === 1) { this.comments = pageResult.records || []; } else { this.comments = [...this.comments, ...(pageResult.records || [])]; } // 更新分页信息 this.totalComments = pageResult.totalRecords || 0; this.currentPage = pageResult.currentPage || page; this.pageSize = pageResult.pageSize || this.pageSize; // 判断是否还有更多数据 this.hasMore = this.comments.length < this.totalComments; }) .catch(err => { this.$message.error('评论加载失败: ' + err.response?.data?.message || '网络错误'); console.error(err); }) .finally(() => { this.isLoading = false; }); }, // 加载更多评论 loadMoreComments() { if (!this.isLoading && this.hasMore) { this.fetchComments(this.blog.id, this.currentPage + 1); } }, // 格式化评论时间(最终修复版) formatCommentTime(timestamp) { if (!timestamp) return ''; // 尝试将时间戳转换为数字 let timeValue; // 处理字符串类型的时间戳 if (typeof timestamp === 'string') { // 移除所有非数字字符 const cleanTimestamp = timestamp.replace(/[^\d]/g, ''); // 如果清理后为空字符串,尝试其他解析方法 if (!cleanTimestamp) { // 尝试直接解析原始字符串 try { timeValue = Number(timestamp); } catch (e) { console.error('Failed to parse timestamp:', timestamp); return '未知时间'; } } else { timeValue = Number(cleanTimestamp); } } else if (typeof timestamp === 'number') { timeValue = timestamp; } else { console.error('Unsupported timestamp type:', typeof timestamp); return '未知时间'; } // 验证转换后的时间戳是否为有效数字 if (isNaN(timeValue)) { console.error('Invalid timestamp value:', timestamp); return '未知时间'; } // 处理零值或负值时间戳 if (timeValue <= 0) { return '未知时间'; } // 根据时间戳范围智能判断(优化处理超长时间戳) let commentDate; // 特殊处理:如果时间戳大于当前时间的2倍,可能是前端时间戳生成问题 const currentTime = Date.now(); if (timeValue > currentTime * 2) { // 尝试将超长时间戳除以10的幂,直到合理范围 let adjustedTimestamp = timeValue; while (adjustedTimestamp > currentTime * 2 && adjustedTimestamp > 1e15) { adjustedTimestamp = Math.floor(adjustedTimestamp / 10); } // 使用调整后的时间戳 commentDate = new Date(adjustedTimestamp); } else { // 默认作为毫秒级时间戳处理 commentDate = new Date(timeValue); } // 验证日期有效性 if (isNaN(commentDate.getTime())) { console.error('Invalid date from timestamp:', timestamp); return '未知时间'; } // 计算与当前时间的差值(毫秒) const now = new Date(); const diffMs = now - commentDate; // 处理未来时间(diffMs为负数) if (diffMs < 0) { // 未来时间显示完整日期 return commentDate.toISOString().slice(0, 10); } // 计算差值(分钟、小时、天) const diffMinutes = Math.floor(diffMs / 60000); const diffHours = Math.floor(diffMs / 3600000); const diffDays = Math.floor(diffMs / 86400000); // 相对时间显示 if (diffMinutes < 1) return '刚刚'; if (diffMinutes < 60) return `${diffMinutes}分钟前`; if (diffHours < 24) return `${diffHours}小时前`; if (diffDays < 7) return `${diffDays}天前`; // 超过7天,显示完整日期 return commentDate.toISOString().slice(0, 10); } } }) </script> </body> </html>时间显示错了,传进来的"createTime": 1749989266662,后端System.currentTimeMillis()产生的,时间显示错了
06-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值