加快Qemu Aarch32虚拟开发板的启动速度
软件版本
Qemu: 2.8.0
虚拟开发板: vexpress-ca9
概述
之前的博文介绍了将Python移植到开发板上, 根文件系统采用的是ramdisk, 这个文件系统的缺点是修改的内容重启会丢失, 同时由于Python相关的文件体积很大,会严重降低开机启动速度。为此, 我们下面更换跟文件系统的格式为ext4。
正文
1、参考 http://www.cnblogs.com/pengdonglin137/p/6792323.html 创建一个虚拟的sd卡镜像文件, 分区如下
Device Boot Start End Blocks Id System
/dev/loop0p1 Linux
/dev/loop0p2 Linux
/dev/loop0p3 Linux
创建了一个1GB的镜像文件,第一个分区50M, 第二个400M, 剩下的都给第三个分区,最后将这三个分区都格式化为ext4格式。
第一个分区存放除/usr之外的其他目录, 将来挂载到/下, 第二个分区存放/usr目录,将来挂载到/usr下, 第三个分区存放用户数据,将来挂载到/data下面。 当然,自己根据需要也可以有其他做法。
2、 修改之前制作ramdisk的脚本
#!/bin/bash sudo rm -rf rootfs
sudo rm -rf tmpfs
sudo rm -rf ramdisk* sudo mkdir rootfs
sudo cp ../busybox-1.24./_install/* rootfs/ -raf
sudo losetup -d /dev/loop0
sudo losetup /dev/loop0 ./fs_vexpress_1G.img sudo mkdir -p rootfs/proc/
sudo mkdir -p rootfs/sys/
sudo mkdir -p rootfs/tmp/
sudo mkdir -p rootfs/root/
sudo mkdir -p rootfs/var/
sudo mkdir -p rootfs/mnt/ sudo cp etc rootfs/ -arf sudo cp -arf ../arm-2014.05/arm-none-linux-gnueabi/libc/lib rootfs/ ver=3
sudo mkdir -p rootfs/usr
pushd rootfs/usr
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/lib .
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/include .
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/bin .
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/share .
sudo /home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin/arm-none-linux-gnueabi-strip lib/python*
popd ver=2
sudo mkdir -p rootfs/usr
pushd rootfs/usr
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/lib .
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/include .
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/bin .
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/share .
sudo /home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin/arm-none-linux-gnueabi-strip lib/python*
popd #sqlite
sudo cp /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/bin/* rootfs/bin/
sudo cp /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/include/* rootfs/include/
sudo cp /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/lib/* rootfs/lib/
sudo strip /rootfs/bin/sqlite3 #readline
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Readline/aarch32/include/* rootfs/include/
sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Readline/aarch32/lib/* rootfs/lib/ sudo mkdir -p rootfs/dev/
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/null c 1 3 sudo rm -rf rootfs/lib/*.a
sudo rm -rf rootfs/lib/*.la
sudo /home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin/arm-none-linux-gnueabi-strip rootfs/lib/* sudo mkdir -p rootfs/tools
sudo cp ./other_tools/* rootfs/tools sudo mkdir -p tmpfs
sudo mount -t ext4 /dev/loop0p2 ./tmpfs
sudo rm -rf ./tmpfs/*
sudo mv rootfs/usr/* ./tmpfs/
sudo umount ./tmpfs/ sudo mount -t ext4 /dev/loop0p1 ./tmpfs/
sudo rm -rf ./tmpfs/*
sudo cp -raf ./rootfs/* ./tmpfs/
sudo umount ./tmpfs/ sudo losetup -d /dev/loop0
3、 修改启动脚本/etc/init.d/rcS
#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask
export PATH runlevel prevlevel mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mkdir -p /var/lock ln -sf /sys/kernel/debug /d
mkdir -p /usr
mkdir -p /data mount -t ext4 /dev/mmcblk0p2 /usr
mount -t ext4 /dev/mmcblk0p3 /data ifconfig lo 127.0.0.1
ifconfig eth0 192.168.1.2 /bin/hostname -F /etc/sysconfig/HOSTNAME if [ -e /usr/sbin/telnetd ];then
telnetd&
fi
4、修改启动qemu的参数
sudo qemu-system-arm \
-M vexpress-a9 \
-m 1024M \
-smp \
-kernel ./linux-4.10/out_aarch32/arch/arm/boot/zImage \
-nographic \
-append "root=/dev/mmcblk0p1 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel" \
-sd ./rootfs/fs_vexpress_1G.img \
-dtb ./linux-4.10/out_aarch32/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-net nic,vlan= -net tap,vlan=,ifname=tap0
5、 修改br0的ip地址,保证跟开发板在一个网段
sudo ifconfig br0: 192.168.1.100
6、然后重新制作文件系统, 启动开发板
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.10.+ (pengdonglin@pengdonglin-HP) (gcc version 4.8. (prerelease) (Sourcery CodeBench Lite 2014.05-) ) # SMP Fri Mar :: CST
[ 0.000000] CPU: ARMv7 Processor [410fc090] revision (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
[ 0.000000] OF: fdt:Machine model: V2P-CA9
[ 0.000000] debug: ignoring loglevel setting.
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] On node totalpages:
[ 0.000000] free_area_init_node: node , pgdat c0a637c0, node_mem_map ef7fa000
[ 0.000000] Normal zone: pages used for memmap
[ 0.000000] Normal zone: pages reserved
[ 0.000000] Normal zone: pages, LIFO batch:
[ 0.000000] HighMem zone: pages, LIFO batch:
[ 0.000000] percpu: Embedded pages/cpu @ef7b4000 s27648 r8192 d21504 u57344
[ 0.000000] pcpu-alloc: s27648 r8192 d21504 u57344 alloc=*
[ 0.000000] pcpu-alloc: [] [] [] []
[ 0.000000] Built zonelists in Zone order, mobility grouping on. Total pages:
[ 0.000000] Kernel command line: root=/dev/mmcblk0p1 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel
[ 0.000000] log_buf_len individual max cpu contribution: bytes
[ 0.000000] log_buf_len total cpu_extra contributions: bytes
[ 0.000000] log_buf_len min size: bytes
[ 0.000000] log_buf_len: bytes
[ 0.000000] early log buf free: (%)
[ 0.000000] PID hash table entries: (order: , bytes)
[ 0.000000] Dentry cache hash table entries: (order: , bytes)
[ 0.000000] Inode-cache hash table entries: (order: , bytes)
[ 0.000000] Memory: 1029332K/1048576K available (6144K kernel code, 453K rwdata, 1440K rodata, 1024K init, 191K bss, 19244K reserved, 0K cma-reserved, 262144K highmem)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( kB)
[ 0.000000] fixmap : 0xffc00000 - 0xfff00000 ( kB)
[ 0.000000] vmalloc : 0xf0800000 - 0xff800000 ( MB)
[ 0.000000] lowmem : 0xc0000000 - 0xf0000000 ( MB)
[ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( MB)
[ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( MB)
[ 0.000000] .text : 0xc0008000 - 0xc0700000 ( kB)
[ 0.000000] .init : 0xc0900000 - 0xc0a00000 ( kB)
[ 0.000000] .data : 0xc0a00000 - 0xc0a71784 ( kB)
[ 0.000000] .bss : 0xc0a73000 - 0xc0aa2c4c ( kB)
[ 0.000000] SLUB: HWalign=, Order=-, MinObjects=, CPUs=, Nodes=
[ 0.000000] Hierarchical RCU implementation.
[ 0.000000] Build-time adjustment of leaf fanout to .
[ 0.000000] RCU restricting CPUs from NR_CPUS= to nr_cpu_ids=.
[ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=, nr_cpu_ids=
[ 0.000000] NR_IRQS: nr_irqs:
[ 0.000000] L2C: platform modifies aux control register: 0x02020000 -> 0x02420000
[ 0.000000] L2C: DT/platform modifies aux control register: 0x02020000 -> 0x02420000
[ 0.000000] L2C- enabling early BRESP for Cortex-A9
[ 0.000000] L2C- full line of zeros enabled for Cortex-A9
[ 0.000000] L2C- dynamic clock gating disabled, standby mode disabled
[ 0.000000] L2C- cache controller enabled, ways, kB
[ 0.000000] L2C-: CACHE_ID 0x410000c8, AUX_CTRL 0x46420001
[ 0.000000] smp_twd: clock not found -
[ 0.000224] sched_clock: bits at 24MHz, resolution 41ns, wraps every 89478484971ns
[ 0.003064] clocksource: arm,sp804: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: ns
[ 0.003667] Failed to initialize '/smb@04000000/motherboard/iofpga@7,00000000/timer@12000': -
[ 0.007950] Console: colour dummy device 80x30
[ 0.008360] Calibrating local timer... .26MHz.
[ 0.063533] Calibrating delay loop... 864.25 BogoMIPS (lpj=)
[ 0.148207] pid_max: default: minimum:
[ 0.149276] Mount-cache hash table entries: (order: , bytes)
[ 0.149330] Mountpoint-cache hash table entries: (order: , bytes)
[ 0.158795] CPU: Testing write buffer coherency: ok
[ 0.159287] ftrace: allocating entries in pages
[ 0.582666] CPU0: thread -, cpu , socket , mpidr
[ 0.586510] Setting up static identity map for 0x60100000 - 0x60100058
[ 0.594816] smp: Bringing up secondary CPUs ...
[ 0.675809] CPU1: thread -, cpu , socket , mpidr
[ 1.618593] CPU2: failed to boot: -
[ 2.561153] CPU3: failed to boot: -
[ 2.561360] smp: Brought up node, CPUs
[ 2.561437] SMP: Total of processors activated (1717.04 BogoMIPS).
[ 2.561524] CPU: All CPU(s) started in SVC mode.
[ 2.592907] devtmpfs: initialized
[ 2.609363] VFP support v0.: implementor architecture part variant rev
[ 2.624710] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: ns
[ 2.625256] futex hash table entries: (order: , bytes)
[ 2.670281] NET: Registered protocol family
[ 2.673665] DMA: preallocated KiB pool for atomic coherent allocations
[ 2.835405] cpuidle: using governor ladder
[ 2.836034] hw-breakpoint: debug architecture 0x4 unsupported.
[ 2.837337] Serial: AMBA PL011 UART driver
[ 2.849208] OF: amba_device_add() failed (-) for /memory-controller@100e0000
[ 2.850164] OF: amba_device_add() failed (-) for /memory-controller@100e1000
[ 2.850745] OF: amba_device_add() failed (-) for /watchdog@100e5000
[ 2.852480] irq: type mismatch, failed to map hwirq- for /interrupt-controller@1e001000!
[ 2.868418] .uart: ttyAMA0 at MMIO 0x10009000 (irq = , base_baud = ) is a PL011 rev1
[ 2.879767] console [ttyAMA0] enabled
[ 2.883103] 1000a000.uart: ttyAMA1 at MMIO 0x1000a000 (irq = , base_baud = ) is a PL011 rev1
[ 2.885980] 1000b000.uart: ttyAMA2 at MMIO 0x1000b000 (irq = , base_baud = ) is a PL011 rev1
[ 2.888224] 1000c000.uart: ttyAMA3 at MMIO 0x1000c000 (irq = , base_baud = ) is a PL011 rev1
[ 2.890106] OF: amba_device_add() failed (-) for /smb@/motherboard/iofpga@,/wdt@0f000
[ 2.958532] SCSI subsystem initialized
[ 2.960351] libata version 3.00 loaded.
[ 2.961410] usbcore: registered new interface driver usbfs
[ 2.961734] usbcore: registered new interface driver hub
[ 2.961995] usbcore: registered new device driver usb
[ 2.968920] Advanced Linux Sound Architecture Driver Initialized.
[ 2.991662] clocksource: Switched to clocksource arm,sp804
[ 3.169450] NET: Registered protocol family
[ 3.175334] TCP established hash table entries: (order: , bytes)
[ 3.175928] TCP bind hash table entries: (order: , bytes)
[ 3.176278] TCP: Hash tables configured (established bind )
[ 3.177303] UDP hash table entries: (order: , bytes)
[ 3.177536] UDP-Lite hash table entries: (order: , bytes)
[ 3.178707] NET: Registered protocol family
[ 3.182153] RPC: Registered named UNIX socket transport module.
[ 3.182287] RPC: Registered udp transport module.
[ 3.182386] RPC: Registered tcp transport module.
[ 3.182476] RPC: Registered tcp NFSv4. backchannel transport module.
[ 3.193307] hw perfevents: enabled with armv7_cortex_a9 PMU driver, counters available
[ 3.205209] workingset: timestamp_bits= max_order= bucket_order=
[ 3.236529] squashfs: version 4.0 (//) Phillip Lougher
[ 3.242395] jffs2: version 2.2. (NAND) © - Red Hat, Inc.
[ 3.243965] 9p: Installing v9fs 9p2000 file system support
[ 3.250751] bounce: pool size: pages
[ 3.250959] io scheduler noop registered (default)
[ 3.255927] clcd-pl11x .clcd: PL111 designer rev2 at 0x10020000
[ 3.262547] clcd-pl11x .clcd: /clcd@ hardware, 1024x768@ display
[ 3.354700] Console: switching to colour frame buffer device 128x48
[ 3.369651] clcd-pl11x 1001f000.clcd: PL111 designer rev2 at 0x1001f000
[ 3.371374] clcd-pl11x 1001f000.clcd: /smb@/motherboard/iofpga@,/clcd@1f000 hardware, 640x480@ display
[ 3.761034] brd: module loaded
[ 3.766070] .flash: Found x16 devices at 0x0 in -bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
[ 3.766538] Intel/Sharp Extended Query Table at 0x0031
[ 3.767105] Using buffer write method
[ 3.767447] erase region : offset=0x0,size=0x80000,blocks=
[ 3.771517] .flash: Found x16 devices at 0x0 in -bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
[ 3.771689] Intel/Sharp Extended Query Table at 0x0031
[ 3.772144] Using buffer write method
[ 3.772279] erase region : offset=0x0,size=0x80000,blocks=
[ 3.772453] Concatenating MTD devices:
[ 3.772555] (): "40000000.flash"
[ 3.772643] (): "40000000.flash"
[ 3.772710] into device "40000000.flash"
[ 3.789874] libphy: Fixed MDIO Bus: probed
[ 3.846445] libphy: smsc911x-mdio: probed
[ 3.848873] smsc911x 4e000000.ethernet eth0: MAC Address: :::::
[ 3.957275] isp1760 4f000000.usb: bus width: , oc: digital
[ 3.959405] isp1760 4f000000.usb: NXP ISP1760 USB Host Controller
[ 3.960632] isp1760 4f000000.usb: new USB bus registered, assigned bus number
[ 3.963035] isp1760 4f000000.usb: Scratch test failed.
[ 3.963612] isp1760 4f000000.usb: can't setup: -19
[ 3.964748] isp1760 4f000000.usb: USB bus deregistered
[ 3.974946] usbcore: registered new interface driver usb-storage
[ 3.992856] mousedev: PS/ mouse device common for all mice
[ 4.004329] rtc-pl031 .rtc: rtc core: registered pl031 as rtc0
[ 4.014931] mmci-pl18x .mmci: Got CD GPIO
[ 4.015185] mmci-pl18x .mmci: Got WP GPIO
[ 4.016741] mmci-pl18x .mmci: mmc0: PL181 manf rev0 at 0x10005000 irq , (pio)
[ 4.106224] input: AT Raw Set keyboard as /devices/platform/smb@/smb@:motherboard/smb@:motherboard:iofpga@,/.kmi/serio0/input/input0
[ 4.108713] ledtrig-cpu: registered to indicate activity on CPUs
[ 4.123420] mmc0: new SD card at address
[ 4.125672] mmcblk0: mmc0: QEMU! 1.00 GiB
[ 4.137083] usbcore: registered new interface driver usbhid
[ 4.140982] usbhid: USB HID core driver
[ 4.169460] aaci-pl041 .aaci: ARM AC'97 Interface PL041 rev0 at 0x10004000, irq 33
[ 4.169617] aaci-pl041 .aaci: FIFO entries
[ 4.170516] oprofile: using arm/armv7-ca9
[ 4.171435] NET: Registered protocol family
[ 4.172032] 9pnet: Installing 9P2000 support
[ 4.172863] Registering SWP/SWPB emulation handler
[ 4.182829] rtc-pl031 .rtc: setting system clock to -- :: UTC ()
[ 4.183640] ALSA device list:
[ 4.183720] #: ARM AC'97 Interface PL041 rev0 at 0x10004000, irq 33
[ 4.187543] mmcblk0: p1 p2 p3
[ 4.730607] input: ImExPS/ Generic Explorer Mouse as /devices/platform/smb@/smb@:motherboard/smb@:motherboard:iofpga@,/.kmi/serio1/input/input2
[ 4.767878] random: fast init done
[ 4.786719] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Opts: (null)
[ 4.787857] VFS: Mounted root (ext4 filesystem) on device :.
[ 4.819841] Freeing unused kernel memory: 1024K
[ 5.349898] random: crng init done
ln: /d/debug: Operation not permitted
[ 6.876743] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 6.902438] EXT4-fs (mmcblk0p3): mounted filesystem with ordered data mode. Opts: (null)
[ 7.060910] Generic PHY 4e000000.etherne:: attached PHY driver [Generic PHY] (mii_bus:phy_addr=4e000000.etherne:, irq=-)
[ 7.065577] smsc911x 4e000000.ethernet eth0: SMSC911x/921x identified at 0xf1420000, IRQ: Please press Enter to activate this console. login[]: root login on 'pts/0' [root@vexpress ]#
[root@vexpress ]# mount
/dev/root on / type ext4 (rw,relatime,data=ordered)
proc on /proc type proc (rw,relatime)
tmpfs on /tmp type tmpfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=,ptmxmode=)
/dev/mmcblk0p2 on /usr type ext4 (rw,relatime,data=ordered)
/dev/mmcblk0p3 on /data type ext4 (rw,relatime,data=ordered)
完。
加快Qemu Aarch32虚拟开发板的启动速度的更多相关文章
- 实现Qemu aarch32虚拟开发板ping www.baidu.com
环境 Qemu: 2.8.0 开发板: vexpress-ca9 概述 如果要玩物联网,至少应该让开发板实现联网,让qemu支持联网在之前的博文中已经有介绍了,但是如果只能在自己的局域网内玩耍就太没意 ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统
qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】
转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...
- 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...
- 为Qemu aarch32开发板添加sd卡
Qemu: 2.8.0 开发板: vexpress 1.制作sd卡镜像 2.分区 sudo losetup /dev/loop0 fs_vexpress_1G.img sudo fdisk /dev/ ...
- QEMU让你无需开发板即可玩溜RT-Thread~
1.1 本文的目的和背景 嵌入式软件开发离不开开发板,在没有物理开发板的情况下,可以使用QEMU等类似的虚拟机来模拟开发板.QEMU是一个支持跨平台虚拟化的虚拟机,它可以虚拟很多开发板.为了方便大家在 ...
- 基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行
宿主机:Ubuntu16.04 x64(Linux内核4.4.0) 交叉编译工具链:gcc-arm-linux-gnueabiarm-linux-gcc:4.4.3QEMU:2.5.0Linux ke ...
- CentOS 7 利用qemu模拟ARM vexpress A9开发板
听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...
- 为Qemu aarch32添加BeautifulSoup4模块
环境 Qemu:2.8.0 开发板:vexpress-ca9 概述 上一篇博文已经可以让我们的开发板可以成功的ping通百度了,据说Python的网络功能也很强大,而Beautiful Soup是 ...
随机推荐
- http和socket之长连接和短连接区别【转】
转自:https://blog.csdn.net/mengyafei43/article/details/25195445 TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层 ...
- C语言清空输入缓冲区的N种方法对比【转】
转自:http://www.cnblogs.com/codingmylife/archive/2010/04/18/1714954.html C语言中有几个基本输入函数: //获取字符系列 int f ...
- Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】
原文地址:Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://bl ...
- POI操作Excel详解,HSSF和XSSF两种方式
package com.tools.poi.lesson1; import java.io.FileInputStream; import java.io.FileNotFoundException; ...
- php里获取第一个中文首字母并排序
需求里结算首页需要按门店的首字母A-Z排序.我的数据结构原本是这样的: Array ( [0] => Array ( [sid] => 2885842 [recetcstoredpay] ...
- **linux实用命令之如何移动文件夹及文件下所有文件
http://www.linuxde.net/2013/02/12448.html 格式: mv [选项(option)] 源文件或目录 目标文件或目录 使用命令: mv webdata /bin/u ...
- Java编程的逻辑 (25) - 异常 (下)
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- spring-cloud-sleuth+zipkin追踪服务实现(四)
1.前言 在上一篇spring-cloud-sleuth+zipkin追踪服务实现(三)的处理实现后,很多朋友告诉我,在zipkin server的管理页面无法看到项目依赖关系. 当时也没有多想,以为 ...
- shell学习(三)
libvirt用于管理KVM本身的工具 virt-install用于安装虚拟机需要的安装包,安装虚拟机 virt-mananger:管理创建删除虚拟机的工具 ---恢复内容开始--- 1 gre ...
- ubuntu下spark安装配置
一.安装vmware虚拟机 二.在虚拟机上安装ubuntu12.04操作系统 三.安装jdk1.8.0_25 http://www.oracle.com/technetwork/java/javase ...