用qemu搭建aarch64學習環境

来源:http://www.cnblogs.com/pengdonglin137/archive/2017/02/22/6431234.html
-Advertisement-
Play Games

作者信息 作者: 彭東林 郵箱: [email protected] QQ: 405728433 軟體平臺 主機: Ubuntu14.04 64位版本 模擬器:Qemu-2.8.0 Linux內核版本: Linux-4.10 Busybox版本:busybox-1.24.2 工具鏈: gc ...


作者信息

作者: 彭東林

郵箱: [email protected]

QQ: 405728433

 

軟體平臺

主機: Ubuntu14.04 64位版本

模擬器:Qemu-2.8.0

Linux內核版本: Linux-4.10

Busybox版本:busybox-1.24.2

工具鏈: gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux

 

參考博文

用Qemu模擬vexpress-a9 --- 配置 qemu 的網路功能

用Qemu模擬vexpress-a9 (一) --- 搭建Linux kernel調試環境

用Qemu模擬vexpress-a9 (三)--- 實現用u-boot引導Linux內核

qemu中使用9p,支持host和guest中共用目錄

讓TQ2440也用上設備樹(1)

用Qemu模擬vexpress-a9 (六) --- 多核

用Qemu模擬vexpress-a9 (七) --- 嵌入式設備上安裝telnet服務

 

緣起

隨著aarch64在手機和伺服器上面的普及,我們越來越有必要學習一下aarch64的知識,但是目前市面上面還沒有做的很好的aarch64的開發板,之前我買了一塊NanoPC-T3,用的SoC是Samsung的6818,是cortex-a53 八核架構,但是商家給的資料全都是32位的(armv8相容aarch32和aarch64),他們說Samsung沒有給64位的BSP資料,所以只能等待Samsung來解決,這樣的結果令我很失望,偶然看到網上有人用Qemu模擬器來搭建aarch64的運行環境,讓我看到了曙光,所以從網上搜颳了一下資料,為後人鋪路。

下麵涉及到的軟體包可以到這裡下載。

具備的功能

模擬一個cortex-a53 雙核或者單核的環境,同時可以跟Host通信,以便於共用一些文件,為了簡單起見,根文件系統使用的是ramdisk格式。

正文

1、編譯Qemu模擬器

首先到Qemu官網下載最新的模擬器,我下到的是Qemu-2.8.0,也可以下載其他版本

1 tar -xf qemu-2.8.0.tar.xz
2 cd qemu-2.8.0/
3 mkdir build
4 cd build/
5 # 需要安裝這個軟體包,因為我們使能了--enable-virtfs, 否則configure的時候會失敗
6 sudo apt-get install libcap-dev  
7 ../configure --target-list=arm-softmmu,i386-softmmu,x86_64-softmmu,aarch64-linux-user,arm-linux-user,i386-linux-user,x86_64-linux-user,aarch64-softmmu --audio-drv-list=alsa --enable-virtfs
8 make -j8
9 sudo make install 

然後就可以使用我們下麵會用到的qemu-system-aarch64工具了。

2、下載工具鏈

登錄這個網址:http://www.veryarm.com/aarch64-linux-gnu-gcc

其中有一些註意事項:

aarch64-linux-gnu-gcc是由 Linaro 公司基於GCC推出的的ARM交叉編譯工具。可用於交叉編譯ARMv8 64位目標中的裸機程式、u-boot、Linux kernel、filesystem和App應用程式。aarch64-linux-gnu-gcc交叉編譯器必須安裝在64為主機上,才能編譯目標代碼。

我們這裡使用的是最新的Linux解壓版:

3、下載編譯最新的Linux內核

登錄https://www.kernel.org/,   下載最新的Linux版本,目前最新的是Linux-4.10。 

下麵是編譯下麵要用的kernel的命令:

1 #!/bin/bash
2 cross_compile=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin/aarch64-linux-gnu-
3 make CROSS_COMPILE=$cross_compile ARCH=arm64 O=./out_aarch64 defconfig
4 make CROSS_COMPILE=$cross_compile ARCH=arm64 O=./out_aarch64 menuconfig
5 make CROSS_COMPILE=$cross_compile ARCH=arm64 O=./out_aarch64 Image -j4

由於下麵要用到ramdisk的啟動方式,需要在kernel配置中支持:

1 General setup  --->
2     ----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
3 
4 Device Drivers  --->
5     [*] Block devices  --->
6             <*>   RAM block device support
7             (65536) Default RAM disk size (kbytes)

這裡我們給ramdisk設置的預設大小是64MB,不能比後面我們實際生成的ramdisk.img的size小。

此外,由於我們還需要支持NFS掛在以及通過9p的方式跟Host共用文件,這些也需要在kernel中進行相應的配置。(預設配置已經支持了

關於Qemu的9p方式實現跟Host的目錄共用可以參考 : qemu中使用9p,支持host和guest中共用目錄    

這樣就有了我們下麵要用到的內核鏡像Image。

4、製作根文件系統

登錄https://busybox.net/downloads/下載要用的busybox版本,這裡我下的是busybox-1.24.2

要設置的不多:

執行make menuconfig,配置下麵幾項:

1 Build Options  --->
2 
3     [*] Build BusyBox as a static binary (no shared libs)
4 
5     (/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin/aarch64-linux-gnu-) Cross Compiler prefix

然後執行make && make install命令

下麵製作啟動用的ramdisk,我把這個過程寫成了腳本,如下:

 1 #!/bin/bash
 2 sudo rm -rf rootfs
 3 sudo rm -rf tmpfs
 4 sudo rm -rf ramdisk*
 5 sudo mkdir rootfs
 6 sudo cp ../busybox-1.24.2/_install/*  rootfs/ -raf
 7 sudo mkdir -p rootfs/proc/
 8 sudo mkdir -p rootfs/sys/
 9 sudo mkdir -p rootfs/tmp/
10 sudo mkdir -p rootfs/root/
11 sudo mkdir -p rootfs/var/
12 sudo mkdir -p rootfs/mnt/
13 sudo cp etc rootfs/ -arf
14 sudo mkdir -p rootfs/lib
15 sudo cp -arf ../gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/aarch64-linux-gnu/libc/lib/aarch64-linux-gnu/* rootfs/lib/
16 sudo rm rootfs/lib/*.a
17 sudo ../gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin/aarch64-linux-gnu-strip rootfs/lib/*
18 sudo mkdir -p rootfs/dev/
19 sudo mknod rootfs/dev/tty1 c 4 1
20 sudo mknod rootfs/dev/tty2 c 4 2
21 sudo mknod rootfs/dev/tty3 c 4 3
22 sudo mknod rootfs/dev/tty4 c 4 4
23 sudo mknod rootfs/dev/console c 5 1
24 sudo mknod rootfs/dev/null c 1 3
25 sudo dd if=/dev/zero of=ramdisk bs=1M count=16
26 sudo mkfs.ext4 -F ramdisk
27 sudo mkdir -p tmpfs
28 sudo mount -t ext4 ramdisk ./tmpfs/  -o loop
29 sudo cp -raf rootfs/*  tmpfs/
30 sudo umount tmpfs
31 sudo gzip --best -c ramdisk > ramdisk.gz
32 sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img

製作ramdisk用到的文件到這裡下載。

5、Qemu支持網路

請參考博客:

用Qemu模擬vexpress-a9 --- 配置 qemu 的網路功能

用Qemu模擬vexpress-a9 (三)--- 實現用u-boot引導Linux內核

6、測試

共用目錄的方法:

 1 sudo qemu-system-aarch64 \
 2     -M  virt \
 3     -cpu cortex-a53 \
 4     -smp 2 \
 5     -m 4096M \
 6     -kernel ./linux-4.10/out_aarch64/arch/arm64/boot/Image \
 7     -nographic \
 8     -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel" \
 9     -initrd ./rootfs/ramdisk.img \
10     -fsdev local,security_model=passthrough,id=fsdev0,path=/nfsroot \
11     -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare

 支持網路的啟動:

 1 sudo qemu-system-aarch64 \
 2     -M  virt \
 3     -cpu cortex-a53 \
 4     -smp 2 \
 5     -m 4096M \
 6     -kernel ./linux-4.10/out_aarch64/arch/arm64/boot/Image \
 7     -nographic \
 8     -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel" \
 9     -initrd ./rootfs/ramdisk.img \
10     -net nic,vlan=0 -net tap,vlan=0,ifname=tap0

當然,也可以將上面的兩種方是合在一起:

 1 sudo qemu-system-aarch64 \
 2     -M  virt \
 3     -cpu cortex-a53 \
 4     -smp 2 \
 5     -m 4096M \
 6     -kernel ./linux-4.10/out_aarch64/arch/arm64/boot/Image \
 7     -nographic \
 8     -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel" \
 9     -initrd ./rootfs/ramdisk.img \
10     -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
11     -fsdev local,security_model=passthrough,id=fsdev0,path=/nfsroot \
12     -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare

我們需要在Host上面先指定一個共用目錄, 比如就用/nfsroot,如果用nfs掛載的話還需要在/etc/export中進行相應的配置。

nfs掛載:

mount -t nfs -o nolock 172.16.14.203:/nfsroot /mnt

9p掛載:

mount -t 9p -o trans=virtio,version=9p2000.L hostshare /mnt2

這樣就實現了跟Host的文件共用, 推薦用9p的方式,這個更穩定一些。

下麵是啟動信息:

  1 $./run_all.sh 
  2 sudo tunctl -u root -t tap0
  3 TUNSETIFF: Device or resource busy
  4 sudo ifconfig tap0 0.0.0.0 promisc up
  5 sudo brctl addif br0 tap0
  6 brctl show
  7 bridge name    bridge id        STP enabled    interfaces
  8 br0        8000.2a30f59a82a1    no        eth0
  9                             tap0
 10 docker0        8000.02429cade970    no        
 11 [    0.000000] Booting Linux on physical CPU 0x0
 12 [    0.000000] Linux version 4.10.0 (pengdonglin@pengdonglin-HP) (gcc version 4.9.1 20140529 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.06) ) #2 SMP PREEMPT Wed Feb 22 19:39:00 CST 2017
 13 [    0.000000] Boot CPU: AArch64 Processor [410fd034]
 14 [    0.000000] debug: ignoring loglevel setting.
 15 [    0.000000] efi: Getting EFI parameters from FDT:
 16 [    0.000000] efi: UEFI not found.
 17 [    0.000000] cma: Reserved 16 MiB at 0x00000000ff000000
 18 [    0.000000] On node 0 totalpages: 1048576
 19 [    0.000000]   DMA zone: 12288 pages used for memmap
 20 [    0.000000]   DMA zone: 0 pages reserved
 21 [    0.000000]   DMA zone: 786432 pages, LIFO batch:31
 22 [    0.000000]   Normal zone: 4096 pages used for memmap
 23 [    0.000000]   Normal zone: 262144 pages, LIFO batch:31
 24 [    0.000000] psci: probing for conduit method from DT.
 25 [    0.000000] psci: PSCIv0.2 detected in firmware.
 26 [    0.000000] psci: Using standard PSCI v0.2 function IDs
 27 [    0.000000] psci: Trusted OS migration not required
 28 [    0.000000] percpu: Embedded 21 pages/cpu @ffff8000fffc0000 s48128 r8192 d29696 u86016
 29 [    0.000000] pcpu-alloc: s48128 r8192 d29696 u86016 alloc=21*4096
 30 [    0.000000] pcpu-alloc: [0] 0 [0] 1 
 31 [    0.000000] Detected VIPT I-cache on CPU0
 32 [    0.000000] CPU features: enabling workaround for ARM erratum 845719
 33 [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 1032192
 34 [    0.000000] Kernel command line: root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel
 35 [    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
 36 [    0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
 37 [    0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
 38 [    0.000000] software IO TLB [mem 0xfafff000-0xfefff000] (64MB) mapped at [ffff8000bafff000-ffff8000beffefff]
 39 [    0.000000] Memory: 4022724K/4194304K available (8508K kernel code, 946K rwdata, 3852K rodata, 1024K init, 393K bss, 155196K reserved, 16384K cma-reserved)
 40 [    0.000000] Virtual kernel memory layout:
 41 [    0.000000]     modules : 0xffff000000000000 - 0xffff000008000000   (   128 MB)
 42 [    0.000000]     vmalloc : 0xffff000008000000 - 0xffff7dffbfff0000   (129022 GB)
 43 [    0.000000]       .text : 0xffff000008080000 - 0xffff0000088d0000   (  8512 KB)
 44 [    0.000000]     .rodata : 0xffff0000088d0000 - 0xffff000008ca0000   (  3904 KB)
 45 [    0.000000]       .init : 0xffff000008ca0000 - 0xffff000008da0000   (  1024 KB)
 46 [    0.000000]       .data : 0xffff000008da0000 - 0xffff000008e8ca00   (   947 KB)
 47 [    0.000000]        .bss : 0xffff000008e8ca00 - 0xffff000008eeee50   (   394 KB)
 48 [    0.000000]     fixed   : 0xffff7dfffe7fd000 - 0xffff7dfffec00000   (  4108 KB)
 49 [    0.000000]     PCI I/O : 0xffff7dfffee00000 - 0xffff7dffffe00000   (    16 MB)
 50 [    0.000000]     vmemmap : 0xffff7e0000000000 - 0xffff800000000000   (  2048 GB maximum)
 51 [    0.000000]               0xffff7e0000000000 - 0xffff7e0004000000   (    64 MB actual)
 52 [    0.000000]     memory  : 0xffff800000000000 - 0xffff800100000000   (  4096 MB)
 53 [    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
 54 [    0.000000] Preemptible hierarchical RCU implementation.
 55 [    0.000000]     Build-time adjustment of leaf fanout to 64.
 56 [    0.000000]     RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=2.
 57 [    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=2
 58 [    0.000000] NR_IRQS:64 nr_irqs:64 0
 59 [    0.000000] GICv2m: range[mem 0x08020000-0x08020fff], SPI[80:143]
 60 [    0.000000] arm_arch_timer: WARNING: Invalid trigger for IRQ3, assuming level low
 61 [    0.000000] arm_arch_timer: WARNING: Please fix your firmware
 62 [    0.000000] arm_arch_timer: Architected cp15 timer(s) running at 62.50MHz (virt).
 63 [    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x1cd42e208c, max_idle_ns: 881590405314 ns
 64 [    0.000107] sched_clock: 56 bits at 62MHz, resolution 16ns, wraps every 4398046511096ns
 65 [    0.002457] Console: colour dummy device 80x25
 66 [    0.002953] Calibrating delay loop (skipped), value calculated using timer frequency.. 125.00 BogoMIPS (lpj=250000)
 67 [    0.005003] pid_max: default: 32768 minimum: 301
 68 [    0.005495] Security Framework initialized
 69 [    0.005796] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes)
 70 [    0.005823] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes)
 71 [    0.033688] ASID allocator initialised with 65536 entries
 72 [    0.055888] EFI services will not be available.
 73 [    0.070508] smp: Bringing up secondary CPUs ...
 74 [    0.103718] Detected VIPT I-cache on CPU1
 75 [    0.104137] CPU1: Booted secondary processor [410fd034]
 76 [    0.105447] smp: Brought up 1 node, 2 CPUs
 77 [    0.105484] SMP: Total of 2 processors activated.
 78 [    0.105544] CPU features: detected feature: 32-bit EL0 Support
 79 [    0.106390] CPU: All CPU(s) started at EL1
 80 [    0.106993] alternatives: patching kernel code
 81 [    0.117571] devtmpfs: initialized
 82 [    0.125123] DMI not present or invalid.
 83 [    0.125968] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
 84 [    0.126043] futex hash table entries: 512 (order: 4, 65536 bytes)
 85 [    0.129131] pinctrl core: initialized pinctrl subsystem
 86 [    0.140179] NET: Registered protocol family 16
 87 [    0.174101] cpuidle: using governor menu
 88 [    0.174984] vdso: 2 pages (1 code @ ffff0000088d7000, 1 data @ ffff000008da5000)
 89 [    0.175144] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
 90 [    0.179636] DMA: preallocated 256 KiB pool for atomic allocations
 91 [    0.180866] Serial: AMBA PL011 UART driver
 92 [    0.217051] 9000000.pl011: ttyAMA0 at MMIO 0x9000000 (irq = 39, base_baud = 0) is a PL011 rev1
 93 [    0.229660] console [ttyAMA0] enabled
 94 [    0.234380] irq: type mismatch, failed to map hwirq-27 for /intc!
 95 [    0.332166] HugeTLB registered 2 MB page size, pre-allocated 0 pages
 96 [    0.346761] ACPI: Interpreter disabled.
 97 [    0.351316] vgaarb: loaded
 98 [    0.352841] SCSI subsystem initialized
 99 [    0.354129] libata version 3.00 loaded.
100 [    0.356211] usbcore: registered new interface driver usbfs
101 [    0.356660] usbcore: registered new interface driver hub
102 [    0.357155] usbcore: registered new device driver usb
103 [    0.363521] pps_core: LinuxPPS API ver. 1 registered
104 [    0.363666] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
105 [    0.364073] PTP clock support registered
106 [    0.365464] dmi: Firmware registration failed.
107 [    0.366899] Advanced Linux Sound Architecture Driver Initialized.
108 [    0.376396] clocksource: Switched to clocksource arch_sys_counter
109 [    0.377906] VFS: Disk quotas dquot_6.6.0
110 [    0.379184] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
111 [    0.381159] pnp: PnP ACPI: disabled
112 [    0.410723] NET: Registered protocol family 2
113 [    0.425569] TCP established hash table entries: 32768 (order: 6, 262144 bytes)
114 [    0.426069] TCP bind hash table entries: 32768 (order: 7, 524288 bytes)
115 [    0.426727] TCP: Hash tables configured (established 32768 bind 32768)
116 [    0.427411] UDP hash table entries: 2048 (order: 4, 65536 bytes)
117 [    0.427736] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes)
118 [    0.429815] NET: Registered protocol family 1
119 [    0.432139] RPC: Registered named UNIX socket transport module.
120 [    0.432824] RPC: Registered udp transport module.
121 [    0.432964] RPC: Registered tcp transport module.
122 [    0.433091] RPC: Registered tcp NFSv4.1 backchannel transport module.
123 [    0.433311] PCI: CLS 0 bytes, default 128
124 [    0.436037] Trying to unpack rootfs image as initramfs...
125 [    0.440854] rootfs image is not initramfs (no cpio magic); looks like an initrd
126 [    0.453369] Freeing initrd memory: 2400K
127 [    0.455311] kvm [1]: HYP mode not available
128 [    0.466090] audit: initializing netlink subsys (disabled)
129 [    0.469328] audit: type=2000 audit(0.452:1): initialized
130 [    0.475039] workingset: timestamp_bits=46 max_order=20 bucket_order=0
131 [    0.518138] squashfs: version 4.0 (2009/01/31) Phillip Lougher
132 [    0.523010] NFS: Registering the id_resolver key type
133 [    0.523578] Key type id_resolver registered
134 [    0.523654] Key type id_legacy registered
135 [    0.523791] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
136 [    0.524960] 9p: Installing v9fs 9p2000 file system support
137 [    0.534620] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
138 [    0.534832] io scheduler noop registered
139 [    0.535541] io scheduler cfq registered (default)
140 [    0.557194] pl061_gpio 9030000.pl061: PL061 GPIO chip @0x0000000009030000 registered
141 [    0.564858] OF: PCI: host bridge /pcie@10000000 ranges:
142 [    0.565315] OF: PCI:    IO 0x3eff0000..0x3effffff -> 0x00000000
143 [    0.565681] OF: PCI:   MEM 0x10000000..0x3efeffff -> 0x10000000
144 [    0.565850] OF: PCI:   MEM 0x8000000000..0xffffffffff -> 0x8000000000
145 [    0.566651] pci-host-generic 3f000000.pcie: ECAM at [mem 0x3f000000-0x3fffffff] for [bus 00-0f]
146 [    0.568716] pci-host-generic 3f000000.pcie: PCI host bridge to bus 0000:00
147 [    0.569014] pci_bus 0000:00: root bus resource [bus 00-0f]
148 [    0.569196] pci_bus 0000:00: root bus resource [io  0x0000-0xffff]
149 [    0.569343] pci_bus 0000:00: root bus resource [mem 0x10000000-0x3efeffff]
150 [    0.569501] pci_bus 0000:00: root bus resource [mem 0x8000000000-0xffffffffff]
151 [    0.570327] pci 0000:00:00.0: [1b36:0008] type 00 class 0x060000
152 [    0.573729] pci 0000:00:01.0: [1af4:1000] type 00 class 0x020000
153 [    0.574091] pci 0000:00:01.0: reg 0x10: [io  0x0000-0x001f]
154 [    0.574263] pci 0000:00:01.0: reg 0x14: [mem 0x00000000-0x00000fff]
155 [    0.574487] pci 0000:00:01.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit pref]
156 [    0.574667] pci 0000:00:01.0: reg 0x30: [mem 0x00000000-0x0003ffff pref]
157 [    0.575624] pci 0000:00:02.0: [1af4:1009] type 00 class 0x000200
158 [    0.575801] pci 0000:00:02.0: reg 0x10: [io  0x0000-0x003f]
159 [    0.575945] pci 0000:00:02.0: reg 0x14: [mem 0x00000000-0x00000fff]
160 [    0.576117] pci 0000:00:02.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit pref]
161 [    0.579248] pci 0000:00:01.0: BAR 6: assigned [mem 0x10000000-0x1003ffff pref]
162 [    0.579773] pci 0000:00:01.0: BAR 4: assigned [mem 0x8000000000-0x8000003fff 64bit pref]
163 [    0.580132] pci 0000:00:02.0: BAR 4: assigned [mem 0x8000004000-0x8000007fff 64bit pref]
164 [    0.580965] pci 0000:00:01.0: BAR 1: assigned [mem 0x10040000-0x10040fff]
165 [    0.581226] pci 0000:00:02.0: BAR 1: assigned [mem 0x10041000-0x10041fff]
166 [    0.581423] pci 0000:00:02.0: BAR 0: assigned [io  0x1000-0x103f]
167 [    0.581602] pci 0000:00:01.0: BAR 0: assigned [io  0x1040-0x105f]
168 [    0.612049] virtio-pci 0000:00:01.0: enabling device (0000 -> 0003)
169 [    0.615182] virtio-pci 0000:00:02.0: enabling device (0000 -> 0003)
170 [    0.617449] xenfs: not registering filesystem on non-xen platform
171 [    0.629378] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
172 [    0.636035] SuperH (H)SCI(F) driver initialized
173 [    0.645049] msm_serial: driver initialized
174 [    0.647353] cacheinfo: Unable to detect cache hierarchy for CPU 0
175 [    0.703861] brd: module loaded
176 [    0.744597] loop: module loaded
177 [    	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 聲音識別和聲學模型的建立 [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan 2016-3-30 聲明 1)本文僅供學術交流,非商用。所以每一部分具體的參考資料並沒有詳細對應。如果某部分不小心侵犯了大家的利益,還望海涵,並聯繫博主 ...
  • 一 、對數據的增刪改查。 1. 新增 2. 修改 3. 查看 4. 刪除 ...
  • Microsoft SQL Server(以下簡稱SQL Server)作為一種中小型資料庫管理系統,已經得到了廣泛的應用,該系統更強調由系統來管理鎖。在用戶有SQL請求時,系統分析請求,自動在滿足鎖定條件和系統性能之間為資料庫加上適當的鎖,同時系統在運行期間常常自動進行優化處理,實行動態加鎖。 對 ...
  • 最近搭建了一套SQLServer2016 AlwaysOn。 筆者是採用修改各節點的hosts文件,以及修改電腦名的dns尾碼,來避免需要另外一臺DNS伺服器。 上面128,129,130三個IP屬於AlwaysOn的三個節點伺服器 IP100屬於可用性組偵聽器IP IP150屬於群集 途中遇到的 ...
  • 轉自:http://www.0791quanquan.com/news_keji/topic_816453/ 探索一:正負數問題 拿tinyint欄位來舉例,unsigned後,欄位的取值範圍是0-255,而signed的範圍是-128 - 127。 那麼如果我們在明確不需要負值存在的情況下,通常是 ...
  • 1:在進行count()統計某列的記錄數的時候,如果採用的NULL值,會別系統自動忽略掉,但是空值是會進行統計到其中的。 2: 判斷NULL 用IS NULL 或者 is not null,SQL 語句函數中可以使用ifnull()函數來進行處理,判斷空字元用=''或者 <>''來進行處理 3: 對 ...
  • 問題1: 解決方法: (該解決方法是設置為NAT模式) 問題2: 解決方法: 問題3: 設置虛擬機與系統時間同步問題 在安裝完CentOS系統後發現時間與現在時間相差8小時,這是由於我們在安裝系統的時選擇的時區是上海, 而CentOS預設bios時間是utc時間,所以時間相差了8小時。這個時候的bi ...
  • sed做為linux下的三劍客,自然功能強大,但是如果使用不當,反而適得其反,今天就因為這個命令採了很深坑,分析一下原因,以諫後來者。 情景回顧: 項目中使用的一個python爬蟲採用的是多線程併發爬取,輸入為一個存放url的文件,因為程式隨時可能停止,所以每次重啟程式的時候需要將以爬取過的url去 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...