原文路径:https://wiki.qemu.org/Documentation/Platforms/ARM

QEMU通常对ARM客户端有很好的支持。它支持近五十种不同的机器。我们支持这么多的原因是ARM硬件比x86硬件变化更大。ARM CPU通常内置于由许多不同公司使用不同设备创建的"片上系统"(SoC)设计中,然后这些SoC内置于机器中,即使它们使用相同的SoC,这些机器也可能进一步变化。即使有五十个板,QEMU也不能覆盖ARM硬件生态系统的一小部分。

由于 ARM 系统在基本方面存在很大差异,因此通常打算在一台计算机上运行的操作系统或固件映像在任何其他计算机上都无法运行。对于习惯于x86世界的新用户来说,这通常令人惊讶,因为每个系统看起来都像一台标准PC。(一旦内核启动,大多数用户空间软件就不太关心硬件的细节了。)

64 位 ARM 的情况非常相似,只是我们没有实现这么多不同的计算机。

除了更常见的"A-profile"CPU(具有MMU并将运行Linux)外,我们还支持Cortex-M3和Cortex-M4"M-profile"CPU(这是用于非常嵌入式的电路板的微控制器)。我们目前只有两块使用M-profile CPU的主板:“lm3s811evb"和"lm3s6965evb”(都是TI Stellaris评估板)。

一、选择 QEMU 机器的指南

1、对现有硬件进行精确仿真

如果您已经有一个完整的系统映像,可以在硬件上运行,并且想要使用 QEMU 启动,请检查 QEMU 是否在其"-machine 帮助"输出中列出了该计算机。

如果是这样,那就是最好的起点。如果没有,那么不幸的是你运气不好:你的映像无法在QEMU上启动。

如果它是一个Linux映像,并且您对用户空间软件最感兴趣,那么您可以提取文件系统并将其与在QEMU模拟的系统上启动的其他内核一起使用。

2、使用 virt 机器进行通用 ARM 系统仿真

如果您不关心重现特定硬件的特性,例如少量RAM,没有PCI或其他硬盘等,并且只想运行Linux,那么最好的选择是使用:

-M virt

virt是一个与任何真实硬件不对应的平台,专为在虚拟机中使用而设计。

它支持PCI, virtio,最新的cpu和大量的RAM。

有关在"virt"板上运行32位ARM Debian Linux的信息,请参阅 https://translatedcode.wordpress.com/2016/11/03/installing-debian-on-qemus-32-bit-arm-virt-board/。

对于64位ARM来说,"virt"也是最好的选择,64位ARM Debian Linux设置见 https://translatedcode.wordpress.com/2017/07/24/installing-debian-on-qemus-64-bit-arm-virt-board/。

“versatilepb"机器过去也经常被用作通用Linux目标;它的缺点是它有一个非常旧的CPU,只有256MB的RAM,但它至少有PCI和SCSI。你可以在 https://www.aurel32.net/info/debian_arm_qemu.php 中找到如何安装Debian的描述(该教程的作者还提供了一些预构建的图像,网址:https://people.debian.org/~aurel32/qemu/armel/)。你最好使用"virt”

1、virt 计算机的客户机内核配置

Linux arm和arm64的"defconfig"应该包括virtio和PCI控制器的正确设备驱动程序;一些较旧的内核版本,特别是对于 32 位 Arm,默认情况下没有启用所有内容。如果您没有看到预期的 PCI 设备,请检查您的来宾配置是否具有:

CONFIG_PCI=y
CONFIG_VIRTIO_PCI=y
CONFIG_PCI_HOST_GENERIC=y

2、virt 计算机图形

图形也可用,但与x86不同,没有启用默认显示设备:您应该从"-device?"的"显示设备"部分中进行选择。一个不错的选择是使用:

-device virtio-gpu-pci

并启用以下 Linux 内核选项(以及前面列出的通用"virtio PCI for the virt machine"选项):

CONFIG_DRM=y
CONFIG_DRM_VIRTIO_GPU=y

此外,由于某种原因,从 v2.12 开始,SDL 图形窗口在某些情况下无法打开,因此您可能需要使用其他方法,如 VNC:

-vnc :0

然后通过以下方式连接到它:

vinagre :5900

3、使用 canon-a1100 机器的示例

Canon-a1100机器没有Linux支持 - 您必须在此处使用特殊的固件,例如"barebox"。要构建裸机映像,请从 A 下载一个压缩包,然后按如下方式编译它:

tar -xjf barebox-....tar.bz2
cd barebox-...
cp ./arch/arm/configs/canon-a1100_defconfig .config
make CROSS_PREFIX=arm-linux-gnu- ARCH=arm CC=arm-linux-gnu-gcc \LD=arm-linux-gnu-ld OBJCOPY=arm-linux-gnu-objcopy olddefconfig
make CROSS_PREFIX=arm-linux-gnu- ARCH=arm CC=arm-linux-gnu-gcc \LD=arm-linux-gnu-ld OBJCOPY=arm-linux-gnu-objcopy -j8

然后,您可以像这样运行映像:

qemu-system-arm -M canon-a1100 -serial stdio -display none -bios barebox.canon-a1100.bin

二、支持的机器

1、qemu-system-arm 支持机器

akita                Sharp SL-C1000 (Akita) PDA (PXA270)
ast2500-evb          Aspeed AST2500 EVB (ARM1176)
ast2600-evb          Aspeed AST2600 EVB (Cortex-A7)
borzoi               Sharp SL-C3100 (Borzoi) PDA (PXA270)
canon-a1100          Canon PowerShot A1100 IS (ARM946)
cheetah              Palm Tungsten|E aka. Cheetah PDA (OMAP310)
collie               Sharp SL-5500 (Collie) PDA (SA-1110)
connex               Gumstix Connex (PXA255)
cubieboard           cubietech cubieboard (Cortex-A8)
emcraft-sf2          SmartFusion2 SOM kit from Emcraft (M2S010)
fp5280g2-bmc         Inspur FP5280G2 BMC (ARM1176)
fuji-bmc             Facebook Fuji BMC (Cortex-A7)
g220a-bmc            Bytedance G220A BMC (ARM1176)
highbank             Calxeda Highbank (ECX-1000)
imx25-pdk            ARM i.MX25 PDK board (ARM926)
integratorcp         ARM Integrator/CP (ARM926EJ-S)
kudo-bmc             Kudo BMC (Cortex-A9)
kzm                  ARM KZM Emulation Baseboard (ARM1136)
lm3s6965evb          Stellaris LM3S6965EVB (Cortex-M3)
lm3s811evb           Stellaris LM3S811EVB (Cortex-M3)
mainstone            Mainstone II (PXA27x)
mcimx6ul-evk         Freescale i.MX6UL Evaluation Kit (Cortex-A7)
mcimx7d-sabre        Freescale i.MX7 DUAL SABRE (Cortex-A7)
microbit             BBC micro:bit (Cortex-M0)
midway               Calxeda Midway (ECX-2000)
mps2-an385           ARM MPS2 with AN385 FPGA image for Cortex-M3
mps2-an386           ARM MPS2 with AN386 FPGA image for Cortex-M4
mps2-an500           ARM MPS2 with AN500 FPGA image for Cortex-M7
mps2-an505           ARM MPS2 with AN505 FPGA image for Cortex-M33
mps2-an511           ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3
mps2-an521           ARM MPS2 with AN521 FPGA image for dual Cortex-M33
mps3-an524           ARM MPS3 with AN524 FPGA image for dual Cortex-M33
mps3-an547           ARM MPS3 with AN547 FPGA image for Cortex-M55
musca-a              ARM Musca-A board (dual Cortex-M33)
musca-b1             ARM Musca-B1 board (dual Cortex-M33)
musicpal             Marvell 88w8618 / MusicPal (ARM926EJ-S)
n800                 Nokia N800 tablet aka. RX-34 (OMAP2420)
n810                 Nokia N810 tablet aka. RX-44 (OMAP2420)
netduino2            Netduino 2 Machine (Cortex-M3)
netduinoplus2        Netduino Plus 2 Machine (Cortex-M4)
none                 empty machine
npcm750-evb          Nuvoton NPCM750 Evaluation Board (Cortex-A9)
nuri                 Samsung NURI board (Exynos4210)
orangepi-pc          Orange Pi PC (Cortex-A7)
palmetto-bmc         OpenPOWER Palmetto BMC (ARM926EJ-S)
quanta-gbs-bmc       Quanta GBS (Cortex-A9)
quanta-gsj           Quanta GSJ (Cortex-A9)
quanta-q71l-bmc      Quanta-Q71l BMC (ARM926EJ-S)
rainier-bmc          IBM Rainier BMC (Cortex-A7)
raspi0               Raspberry Pi Zero (revision 1.2)
raspi1ap             Raspberry Pi A+ (revision 1.1)
raspi2b              Raspberry Pi 2B (revision 1.1)
realview-eb          ARM RealView Emulation Baseboard (ARM926EJ-S)
realview-eb-mpcore   ARM RealView Emulation Baseboard (ARM11MPCore)
realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9
romulus-bmc          OpenPOWER Romulus BMC (ARM1176)
sabrelite            Freescale i.MX6 Quad SABRE Lite Board (Cortex-A9)
smdkc210             Samsung SMDKC210 board (Exynos4210)
sonorapass-bmc       OCP SonoraPass BMC (ARM1176)
spitz                Sharp SL-C3000 (Spitz) PDA (PXA270)
stm32vldiscovery     ST STM32VLDISCOVERY (Cortex-M3)
supermicrox11-bmc    Supermicro X11 BMC (ARM926EJ-S)
swift-bmc            OpenPOWER Swift BMC (ARM1176) (deprecated)
sx1                  Siemens SX1 (OMAP310) V2
sx1-v1               Siemens SX1 (OMAP310) V1
tacoma-bmc           OpenPOWER Tacoma BMC (Cortex-A7)
terrier              Sharp SL-C3200 (Terrier) PDA (PXA270)
tosa                 Sharp SL-6000 (Tosa) PDA (PXA255)
verdex               Gumstix Verdex (PXA270)
versatileab          ARM Versatile/AB (ARM926EJ-S)
versatilepb          ARM Versatile/PB (ARM926EJ-S)
vexpress-a15         ARM Versatile Express for Cortex-A15
vexpress-a9          ARM Versatile Express for Cortex-A9
virt-2.10            QEMU 2.10 ARM Virtual Machine
virt-2.11            QEMU 2.11 ARM Virtual Machine
virt-2.12            QEMU 2.12 ARM Virtual Machine
virt-2.6             QEMU 2.6 ARM Virtual Machine
virt-2.7             QEMU 2.7 ARM Virtual Machine
virt-2.8             QEMU 2.8 ARM Virtual Machine
virt-2.9             QEMU 2.9 ARM Virtual Machine
virt-3.0             QEMU 3.0 ARM Virtual Machine
virt-3.1             QEMU 3.1 ARM Virtual Machine
virt-4.0             QEMU 4.0 ARM Virtual Machine
virt-4.1             QEMU 4.1 ARM Virtual Machine
virt-4.2             QEMU 4.2 ARM Virtual Machine
virt-5.0             QEMU 5.0 ARM Virtual Machine
virt-5.1             QEMU 5.1 ARM Virtual Machine
virt-5.2             QEMU 5.2 ARM Virtual Machine
virt-6.0             QEMU 6.0 ARM Virtual Machine
virt-6.1             QEMU 6.1 ARM Virtual Machine
virt                 QEMU 6.2 ARM Virtual Machine (alias of virt-6.2)
virt-6.2             QEMU 6.2 ARM Virtual Machine
witherspoon-bmc      OpenPOWER Witherspoon BMC (ARM1176)
xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9
z2                   Zipit Z2 (PXA27x)

2、qemu-system-aarch64 支持机器

akita                Sharp SL-C1000 (Akita) PDA (PXA270)
ast2500-evb          Aspeed AST2500 EVB (ARM1176)
ast2600-evb          Aspeed AST2600 EVB (Cortex-A7)
borzoi               Sharp SL-C3100 (Borzoi) PDA (PXA270)
canon-a1100          Canon PowerShot A1100 IS (ARM946)
cheetah              Palm Tungsten|E aka. Cheetah PDA (OMAP310)
collie               Sharp SL-5500 (Collie) PDA (SA-1110)
connex               Gumstix Connex (PXA255)
cubieboard           cubietech cubieboard (Cortex-A8)
emcraft-sf2          SmartFusion2 SOM kit from Emcraft (M2S010)
fp5280g2-bmc         Inspur FP5280G2 BMC (ARM1176)
fuji-bmc             Facebook Fuji BMC (Cortex-A7)
g220a-bmc            Bytedance G220A BMC (ARM1176)
highbank             Calxeda Highbank (ECX-1000)
imx25-pdk            ARM i.MX25 PDK board (ARM926)
integratorcp         ARM Integrator/CP (ARM926EJ-S)
kudo-bmc             Kudo BMC (Cortex-A9)
kzm                  ARM KZM Emulation Baseboard (ARM1136)
lm3s6965evb          Stellaris LM3S6965EVB (Cortex-M3)
lm3s811evb           Stellaris LM3S811EVB (Cortex-M3)
mainstone            Mainstone II (PXA27x)
mcimx6ul-evk         Freescale i.MX6UL Evaluation Kit (Cortex-A7)
mcimx7d-sabre        Freescale i.MX7 DUAL SABRE (Cortex-A7)
microbit             BBC micro:bit (Cortex-M0)
midway               Calxeda Midway (ECX-2000)
mps2-an385           ARM MPS2 with AN385 FPGA image for Cortex-M3
mps2-an386           ARM MPS2 with AN386 FPGA image for Cortex-M4
mps2-an500           ARM MPS2 with AN500 FPGA image for Cortex-M7
mps2-an505           ARM MPS2 with AN505 FPGA image for Cortex-M33
mps2-an511           ARM MPS2 with AN511 DesignStart FPGA image for Cortex-M3
mps2-an521           ARM MPS2 with AN521 FPGA image for dual Cortex-M33
mps3-an524           ARM MPS3 with AN524 FPGA image for dual Cortex-M33
mps3-an547           ARM MPS3 with AN547 FPGA image for Cortex-M55
musca-a              ARM Musca-A board (dual Cortex-M33)
musca-b1             ARM Musca-B1 board (dual Cortex-M33)
musicpal             Marvell 88w8618 / MusicPal (ARM926EJ-S)
n800                 Nokia N800 tablet aka. RX-34 (OMAP2420)
n810                 Nokia N810 tablet aka. RX-44 (OMAP2420)
netduino2            Netduino 2 Machine (Cortex-M3)
netduinoplus2        Netduino Plus 2 Machine (Cortex-M4)
none                 empty machine
npcm750-evb          Nuvoton NPCM750 Evaluation Board (Cortex-A9)
nuri                 Samsung NURI board (Exynos4210)
orangepi-pc          Orange Pi PC (Cortex-A7)
palmetto-bmc         OpenPOWER Palmetto BMC (ARM926EJ-S)
quanta-gbs-bmc       Quanta GBS (Cortex-A9)
quanta-gsj           Quanta GSJ (Cortex-A9)
quanta-q71l-bmc      Quanta-Q71l BMC (ARM926EJ-S)
rainier-bmc          IBM Rainier BMC (Cortex-A7)
raspi0               Raspberry Pi Zero (revision 1.2)
raspi1ap             Raspberry Pi A+ (revision 1.1)
raspi2b              Raspberry Pi 2B (revision 1.1)
raspi3ap             Raspberry Pi 3A+ (revision 1.0)
raspi3b              Raspberry Pi 3B (revision 1.2)
realview-eb          ARM RealView Emulation Baseboard (ARM926EJ-S)
realview-eb-mpcore   ARM RealView Emulation Baseboard (ARM11MPCore)
realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9
romulus-bmc          OpenPOWER Romulus BMC (ARM1176)
sabrelite            Freescale i.MX6 Quad SABRE Lite Board (Cortex-A9)
sbsa-ref             QEMU 'SBSA Reference' ARM Virtual Machine
smdkc210             Samsung SMDKC210 board (Exynos4210)
sonorapass-bmc       OCP SonoraPass BMC (ARM1176)
spitz                Sharp SL-C3000 (Spitz) PDA (PXA270)
stm32vldiscovery     ST STM32VLDISCOVERY (Cortex-M3)
supermicrox11-bmc    Supermicro X11 BMC (ARM926EJ-S)
swift-bmc            OpenPOWER Swift BMC (ARM1176) (deprecated)
sx1                  Siemens SX1 (OMAP310) V2
sx1-v1               Siemens SX1 (OMAP310) V1
tacoma-bmc           OpenPOWER Tacoma BMC (Cortex-A7)
terrier              Sharp SL-C3200 (Terrier) PDA (PXA270)
tosa                 Sharp SL-6000 (Tosa) PDA (PXA255)
verdex               Gumstix Verdex (PXA270)
versatileab          ARM Versatile/AB (ARM926EJ-S)
versatilepb          ARM Versatile/PB (ARM926EJ-S)
vexpress-a15         ARM Versatile Express for Cortex-A15
vexpress-a9          ARM Versatile Express for Cortex-A9
virt-2.10            QEMU 2.10 ARM Virtual Machine
virt-2.11            QEMU 2.11 ARM Virtual Machine
virt-2.12            QEMU 2.12 ARM Virtual Machine
virt-2.6             QEMU 2.6 ARM Virtual Machine
virt-2.7             QEMU 2.7 ARM Virtual Machine
virt-2.8             QEMU 2.8 ARM Virtual Machine
virt-2.9             QEMU 2.9 ARM Virtual Machine
virt-3.0             QEMU 3.0 ARM Virtual Machine
virt-3.1             QEMU 3.1 ARM Virtual Machine
virt-4.0             QEMU 4.0 ARM Virtual Machine
virt-4.1             QEMU 4.1 ARM Virtual Machine
virt-4.2             QEMU 4.2 ARM Virtual Machine
virt-5.0             QEMU 5.0 ARM Virtual Machine
virt-5.1             QEMU 5.1 ARM Virtual Machine
virt-5.2             QEMU 5.2 ARM Virtual Machine
virt-6.0             QEMU 6.0 ARM Virtual Machine
virt-6.1             QEMU 6.1 ARM Virtual Machine
virt                 QEMU 6.2 ARM Virtual Machine (alias of virt-6.2)
virt-6.2             QEMU 6.2 ARM Virtual Machine
witherspoon-bmc      OpenPOWER Witherspoon BMC (ARM1176)
xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9
xlnx-versal-virt     Xilinx Versal Virtual development board
xlnx-zcu102          Xilinx ZynqMP ZCU102 board with 4xA53s and 2xR5Fs based on the value of smp
z2                   Zipit Z2 (PXA27x)

三、技巧

要查看所有受支持计算机的打印输出,请使用:

qemu-system-arm -M help

 qemu-system-aarch64 -M help

四、构建方向

 ./configure --target-list=arm-softmmu,aarch64-softmmu && make

五、建议的命令行

使用 virtio-mmio(和 virt machine)

 qemu-system-aarch64 -m <memory size> -M virt -drive if=none,file=<hard drive file name>,id=hd0 -device virtio-blk-device,drive=hd0 -netdev type=tap,id=net0 -device virtio-net-device,netdev=net0

但是,对于功能更强的客户机,建议使用可发现的总线。例如,与上面相同,但现在使用PCI总线,其上放置带有块设备和网卡的SCSI控制器(这次使用用户空间网络)。运输仍然是virtio

 qemu-system-aarch64 -m <memory size> -M virt -device virtio-scsi-pci -device scsi-hd,drive=hd0 -blockdev node-name=hd0,filename=<hard drive file name> -netdev user,id=unet -device virtio-net-pci,netdev=unet

类似的命令行可以用于qemu-system-arm,只要内核支持VIRTIO,GENERIC_PCI和SCSI_VIRTIO功能。

六、图片

见原文

七、链接

https://en.opensuse.org/openSUSE:AArch64#Using_an_emulator

Linux 内核调试 三:《QEMU ARM guest support》翻译相关推荐

  1. arm linux内核调试,kgdb在ARM开发板上调试kernel成功

    大概几个注意点: 1.公版的Linux需要打kgdb补丁的,kgdb官方那边可能不支持新版本的内核(我的是2.6.18),可以在下面的网址找到,但是ARM上调试需要打哪些补丁,不是很清楚,网上的几篇中 ...

  2. arm架构linux内核调试实战

    前言 偶然间,发现了一个很好用的仓,可以十分方便地进行 arm 架构的 linux 内核调试,该仓地址如下 https://github.com/cc-droid/v-kernel-qemu ,对应的 ...

  3. Linux内核调试技术指南

    前两天,完成了ucos在2440上的移植,以及boot的修改.今天突然想到,我在linux下,该如何来编写,调试比较复杂的驱动.我想这个问题应该从如何调试内核入手,先转载两个文字,待西西看来. 系统搭 ...

  4. linux内核调试指南

    Hunnad的专栏 * 条新通知 * 登录 * 注册 * 欢迎 * 退出 * 我的博客 * 配置 * 写文章 * 文章管理 * 博客首页 * * * * 空间 * 博客 * 好友 * 相册 * 留言 ...

  5. Linux Kernel - Debug Guide (Linux内核调试指南 )

    linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 ...

  6. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  7. Linux内核调试方法总结

    [转]Linux内核调试方法总结 目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG ...

  8. Linux内核调试方法【转】

    转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...

  9. Linux 内核调试器 调试指南

    Linux 内核调试器内幕 KDB 入门指南 Hariprasad Nellitheertha (nharipra@in.ibm.com), 软件工程师, IBM 简介: 调试内核问题时,能够跟踪内核 ...

最新文章

  1. java中的复合数据类型是什么_【填空题】类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素。一个类的实现包括两部分:____和_____....
  2. Java8 Stream详解~筛选:filter
  3. Python网络请求库Requests,妈妈再也不会担心我的网络请求了(二)
  4. golang 读取本机唯一码_UDI医疗器械唯一标识系统,您身边的UDI专家
  5. 英语学习笔记2019-10-25
  6. 数据科学 IPython 笔记本 8.14 自定义 Matplotlib:配置和样式表
  7. 简单介绍Linux进程文件路径的获取方法
  8. 以下系统组件依赖此服务器,Maven中配置本地依赖组件包
  9. ftp ---- 配置文件(默认配置文件解读)
  10. PowerDesigner通过jdbc连接MySQL实现逆向工程步骤
  11. VAE-《Auto-Encoding Variational Bayes》----Section2部分的有关理解
  12. hive 复合结构Map、Struct详解
  13. fMRI数据分析处理原理及方法
  14. python 点对点语音,Python(PyS60)实现简单语音整点报时
  15. 抖音取关-autojs
  16. 蒸汽流量计算软件_海口气体腰轮订制,涡街流量计脉冲,期待合作
  17. Markdown中如何打对勾/对号
  18. 【小程序云开发】本地调试和云端测试的结果不一致,返回值result为null
  19. 你是否对软件确认测试有了解,如何获取软件确认测试报告?
  20. (3)verilog与Systemverilog两种语言编写二分频

热门文章

  1. 通用串行总线控制器:由于其配置信息不完整或已损坏,windows无法启动这个硬件
  2. 数学建模常用模型24:时间序列分析
  3. android接入京东开普勒-2017年12月对接
  4. java扫雷源代码思路_java实现扫雷游戏
  5. 黑帽优化seo是什么?
  6. 分屏总屏计算机电缆,DJYPVP分屏+总屏蔽计算机电缆
  7. linux下i2c驱动架构全面分析,linux I2C驱动 :整体架构(1)
  8. 使用redis创建自己的分布式锁
  9. 【安全】【SQL注入漏洞】通过sql注入获取数据库管理员密码
  10. 三公子推荐的理财书单浓缩版