鉴于对Linux了解甚少,今天,分析了一下MYS-6ULX-IOT的启动过程,做下记录,以了解这个系统到底是怎么运行的。
|
ROM代码执行
|
U-Boot 2016.03-mys-6ulx+g04a0d30 (Apr 28 2018 - 22:58:22 +0800)
CPU: Freescale i.MX6ULL rev1.1 528 MHz (running at 396 MHz)
CPU: Commercial temperature grade (0C to 95C) at 48C
Reset cause: POR
Board: MYS-MX6ULL 14x14
I2C: ready
DRAM: 256 MiB
NAND: 256 MiB
MMC: FSL_SDHC: 0
*** Warning - bad CRC, using default environment
Display: TFT43AB (480x272)
Video: 480x272x24
In: serial
Out: serial
Err: serial
Net: FEC0
Error: FEC0 address not set.
|
U-Boot引导: 启动代码_start,reset,_main,board_init等, 配置
检查基本硬件: CPU、内存闪存、主板、总线、接口、主存储、操作系统内核镜像、根文件系统、安全设备等,就是为操作系统准备必须资源。
根据硬件环境,加载不同的dtb文件,使后续统一的linux kernel运行在相应的硬件平台上。dtb文件就是有关板子具体功能的设备驱动.
参考u-boot FIT image
POR-- power-on reset
CPU信息
Board
I2C
DRAM
NAND
MMC
Display
u-boot的API(如low_level_init、board_init_f、board_init_r等等)做初始化。
疑问:我原以为所有dtb都在kernel后加载, 似乎不全这样?
u-boot使用哪些内存?
|
Normal Boot
Hit any key to stop autoboot: 0
NAND read: device 0 offset 0x500000, size 0xa00000
10485760 bytes read: OK
NAND read: device 0 offset 0xf00000, size 0x100000
1048576 bytes read: OK
Kernel image @ 0x80800000 [ 0x000000 - 0x6861b8 ]
## Flattened Device Tree blob at 83000000
Booting using the fdt blob at 0x83000000
Using Device Tree in place at 83000000, end 8300ba3e
|
从NAND读出 (两个在不同位置,难道一个是kernel,一个是dtb?)
kernel放在0x80800000
FDT设备驱动放在0x83000000
|
Starting kernel ...
Booting Linux on physical CPU 0x0
Linux version 4.1.15-1.2.0+ga17f87e (blackrose@brix4770-debian) (gcc version 5.3 .0 (GCC) ) #1 SMP PREEMPT Tue May 29 22:35:26 CST 2018
|
引导后开始启动内核。
U-Boot用bootm(据说有I, z , m三种) 命令将内核镜像加载到内存的指定地址处,如果有需要还要解压镜像,然后根据操作系统和体系结构的不同给内核传递不同的启动参数,最后启动内核
k erenl正式开始运行
|
CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
|
处理器类型
|
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
|
处理器在进行存储器访问时,访问的是虚拟地址,经过cache缓存和TLB和MMU的映射转换,最终变成了物理地址。cache工作方式:
VIVT(Virtual Index Virtual Tag):使用虚拟地址索引域和虚拟地址的标记域。
VIPT(Virtual Index Physical Tag):使用虚拟地址的索引域和物理地址的标记域。
PIPT(Physical Index Physical Tag):使用物理地址的索引域和物理地址的标记域。
|
Machine model: Freescale i.MX6 ULL 14x14 EVK Board
|
机器源
|
Reserved memory: failed to allocate memory for node 'linux,cma'
|
cma(contigous memory allocator)
内存分配管理
zonelists内存区域节点链表
控制台命令行。 UBI:- Unsorted Block Images一种类似于LVM的逻辑卷管理层。主要实现损益均衡,逻辑擦除块、卷管理,坏块管理等。
UBIFS:基于UBI的FLASH文件系统
MTD --Memory Technology Device, PID—进程ID
Dentry cache目录项高速缓存, Inode-cache 索引节点缓存
|
Memory policy: Data cache writealloc
|
|
PERCPU: Embedded 12 pages/cpu @8fdd4000 s16908 r8192 d24052 u49152
|
|
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 65024
|
|
Kernel command line: console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstyp e=ubifs mtdparts=gpmi-nand:5m(boot),10m(kernel),1m(dtb),-(rootfs)
|
|
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 246684K/262144K **ailable (8626K kernel code, 440K rwdata, 3032K rodata, 428K init, 450K bss, 15460K reserved, 0K cma-reserved, 0K highmem)
|
|
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
vmalloc : 0x90800000 - 0xff000000 (1768 MB)
lowmem : 0x80000000 - 0x90000000 ( 256 MB)
pkmap : 0x7fe00000 - 0x80000000 ( 2 MB)
modules : 0x7f000000 - 0x7fe00000 ( 14 MB)
.text : 0x80008000 - 0x80b6aaf0 (11659 kB)
.init : 0x80b6b000 - 0x80bd6000 ( 428 kB)
.data : 0x80bd6000 - 0x80c440a0 ( 441 kB)
.bss : 0x80c47000 - 0x80cb7b40 ( 451 kB)
|
虚拟地址空间分配
start_kernel(void)
|
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
|
SLUB-- 内核对象缓冲区管理
|
Preemptible hierarchical RCU implementation.
Additional per-CPU info printed with stalls.
RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=1.
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
|
RCU -- Read-copy update内核中的读-拷贝-更新
|
NR_IRQS:16 nr_irqs:16 16
|
中断
|
mxc_clocksource_init 24000000
Switching to timer-based delay loop, resolution 41ns
sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
clocksource mxc_timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79 635851949 ns
|
时钟,
各计时器初始化
|
Console: colour dummy device 80x30
|
控制台
|
Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
|
时延校准
|
pid_max: default: 32768 minimum: 301
|
|
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
|
|
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
|
|
CPU: Testing write buffer coherency: ok
|
|
/cpus/cpu@0 missing clock-frequency property
|
|
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
|
|
Setting up static identity map for 0x80008280 - 0x800082d8
|
|
Brought up 1 CPUs
|
|
SMP: Total of 1 processors activated (48.00 BogoMIPS).
|
Symmetric Multiprocessing,
|
CPU: All CPU(s) started in SVC mode.
|
SVC-- supervisor mode
|
devtmpfs: initialized
|
设备初始化, devfs是文件系统形式的device manager。tmpfs存在在内存和swap中,因此只能保存临时文件。devtmpfs是改进的devfs,也是存在内存中,挂载点是/dev/,缩短开机时间
|
device-tree: Duplicate name in lcdif@021c8000, renamed to "display#1"
|
|
VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
|
VFP(vector floating point)向量浮点指令
|
clocksource jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112 604462750000 ns
|
|
pinctrl core: initialized pinctrl subsystem
|
芯片管脚控制子系统
|
NET: Registered protocol family 16
|
协议16
|
DMA: preallocated 256 KiB pool for atomic coherent allocations
|
DMA
|
cpuidle: using governor ladder
cpuidle: using governor menu
|
空闲处理
|
hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 8 bytes.
|
调试断点?
|
imx6ul-pinctrl 20e0000.iomuxc: initialized IMX pinctrl driver
imx6ul-pinctrl 2290000.iomuxc-snvs: initialized IMX pinctrl driver
|
芯片管脚控制
|
mxs-dma 1804000.dma-apbh: initialized
|
code.woboq.org/linux/linux/drivers/dma/mxs-dma.c.html
|
SCSI subsystem initialized
|
SCSI
|
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
|
USB
|
i2c i2c-1: IMX I2C adapter registered
i2c i2c-1: can't use DMA
|
I2C
|
media: Linux media interface: v0.10
|
media
|
Linux video capture interface: v2.00
|
video capture
|
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@l inux.it>
|
PPS (pulse-per-second) signal connected to a GPIO pin.
www.kernel.org/doc/Documentation/devicetree/bindings/pps/pps-gpio.txt
|
PTP clock support registered
|
PTP -- Precision Time Protocol
|
MIPI CSI2 driver module loaded
|
摄像头
|
Advanced Linux Sound Architecture Driver Initialized.
|
声
|
Bluetooth: Core ver 2.20
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
|
蓝牙 socket laye
协议31
|
Switched to clocksource mxc_timer1
|
|
NET: Registered protocol family 2
|
协议2
|
TCP established hash table entries: 2048 (order: 1, 8192 bytes)
TCP bind hash table entries: 2048 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
|
TCP
|
UDP hash table entries: 256 (order: 1, 8192 bytes)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
|
UDP
|
NET: Registered protocol family 1
|
|
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
|
RPC
|
imx rpmsg driver is registered.
|
RPMsg -- Remote Processor Messaging 核间通讯
|
Bus freq driver module loaded
|
APIs are for setting bus frequency to low or high
|
futex hash table entries: 256 (order: 2, 16384 bytes)
|
Fast Userspace muTexes快速用户空间互斥
|
VFS: Disk quotas dquot_6.6.0
VFS: Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
|
Virtual File system Switch为各类文件系统提供一个统一的操作界面和应用编程接口
|
NFS: Registering the id_resolver key type
|
Network File System
|
Key type id_resolver registered
Key type id_legacy registered
|
|
jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
|
Journalling Flash File System Version2(闪存日志型文件系统第2版)
|
fuse init (API version 7.23)
|
用户空间文件系统
|
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
|
I/O调度器
|
imx-weim 21b8000.weim: Driver registered.
|
WEIM --Wireless External Interface Module
|
backlight supply power not found, using dummy regulator
|
|
MIPI DSI driver module loaded
MIPI DSI driver module loaded
|
MIPI(移动行业处理器接口)是Mobile Industry Processor Interface
DSI Display Serial Interface
|
21c8000.lcdif supply lcd not found, using dummy regulator
mxsfb 21c8000.lcdif: failed to find mxc display driver
Console: switching to colour frame buffer device 60x34
mxsfb 21c8000.lcdif: initialized
|
显示相关
|
imx-sdma 20ec000.sdma: no event needs to be remapped
imx-sdma 20ec000.sdma: loaded firmware 3.3
imx-sdma 20ec000.sdma: initialized
|
Freescale Smart DMA engine
|
2020000.serial: ttymxc0 at MMIO 0x2020000 (irq = 19, base_baud = 5000000) is a I MX
console [ttymxc0] enabled
|
控制台
|
imx-rng 2284000.rngb: iMX RNG Registered.
imx sema4 driver is registered.
[drm] Initialized drm 1.1.0 20060810
[drm] Initialized vivante 1.0.0 20120216 on minor 0
brd: module loaded
loop: module loaded
nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xda
nand: Micron MT29F2G08ABAEAWP
nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
gpmi-nand 1806000.gpmi-nand: enable the asynchronous EDO mode 5
Bad block table found at page 131008, version 0x01
Bad block table found at page 130944, version 0x01
nand_read_bbt: bad block at 0x000000140000
|
各设备功能
|
4 cmdlinepart partitions found on MTD device gpmi-nand
Creating 4 MTD partitions on "gpmi-nand":
0x000000000000-0x000000500000 : "boot"
0x000000500000-0x000000f00000 : "kernel"
0x000000f00000-0x000001000000 : "dtb"
0x000001000000-0x000010000000 : "rootfs"
gpmi-nand 1806000.gpmi-nand: driver registered.
|
nand上4个分区
|
CAN device driver interface
2188000.ethernet supply phy not found, using dummy regulator
pps pps0: new PPS source ptp0
fec 2188000.ethernet (unnamed net_device) (uninitialized): Invalid MAC address: 00:00:00:00:00:00
fec 2188000.ethernet (unnamed net_device) (uninitialized): Using random MAC addr ess: 96:71:63:1b:34:5c
libphy: fec_enet_mii_bus: probed
fec 2188000.ethernet eth0: registered PHC device 0
PPP generic driver version 2.4.2
PPP BSD Compression module registered
PPP Deflate Compression module registered
PPP MPPE Compression module registered
|
CAN pps ppp设备
|
NET: Registered protocol family 24
|
协议24
|
SLIP: version 0.8.4-NET3.019-NEWTTY (dynamic channels, max=256) (6 bit encapsula tion enabled).
CSLIP: code copyright 1989 Regents of the University of California.
SLIP linefill/keepalive option.
|
Serial Line Internet Protocol,串行线路网际协议
压缩的SLIP协议,常用在Telnet,Rlogin之类的应用程序中
|
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-mxc: Freescale On-Chip EHCI Host driver
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usb_ehset_test
2184800.usbmisc supply vbus-wakeup not found, using dummy regulator
2184200.usb supply vbus not found, using dummy regulator
ci_hdrc ci_hdrc.1: EHCI Host Controller
ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
|
USB
以下设备配置参考
git.freescale.com/git/cgit.cgi/imx/linux-imx.git/tree/arch/arm/boot/dts?h=imx_4.1.15_2.0.0_ga&id=rel_imx_4.1.15_2.0.0_ga
|
mousedev: PS/2 mouse device common for all mice
|
mouse
|
input: 20cc000.snvs:snvs-powerkey as /devices/platform/soc/2000000.aips-bus/20cc 000.snvs/20cc000.snvs:snvs-powerkey/input/input0
|
|
tp reset gpio=131
|
|
msg ft5x0x_i2c_rxdata i2c read error: -5
ft5x0x read ID error!
ft5x06_ts: probe of 1-0038 failed with error 161
ft5x0x_ts_init successful
input: iMX6UL TouchScreen Controller as /devices/platform/soc/2000000.aips-bus/2 040000.tsc/input/input1
|
|
snvs_rtc 20cc000.snvs:snvs-rtc-lp: rtc core: registered 20cc000.snvs:snvs-r as r tc0
|
|
i2c /dev entries driver
|
|
IR NEC protocol handler initialized
IR RC5(x/sz) protocol handler initialized
IR RC6 protocol handler initialized
IR JVC protocol handler initialized
IR Sony protocol handler initialized
IR SANYO protocol handler initialized
IR Sharp protocol handler initialized
IR MCE Keyboard/mouse protocol handler initialized
IR XMP protocol handler initialized
|
|
pxp-v4l2 pxp_v4l2: initialized
|
|
usbcore: registered new interface driver uvcvideo
USB Video Class driver (1.1.1)
|
uvc摄像头
|
imx2-wdt 20bc000.wdog: use WDOG_B to reboot.
imx2-wdt 20bc000.wdog: timeout 60 sec (nowayout=0)
|
WDOG
|
Bluetooth: HCI UART driver ver 2.3
Bluetooth: HCI UART protocol H4 registered
Bluetooth: HCI UART protocol BCSP registered
Bluetooth: HCI UART protocol ATH3K registered
|
|
|
|
|
|
|
|
usbcore: registered new interface driver btusb
usbcore: registered new interface driver ath3k
|
|
|
|
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
/soc/aips-bus@02100000/usdhc@02190000: voltage-ranges unspecified
sdhci-esdhc-imx 2190000.usdhc: could not get ultra high speed state, work on nor mal mode
sdhci-esdhc-imx 2190000.usdhc: Got CD GPIO
sdhci-esdhc-imx 2190000.usdhc: No vmmc regulator found
sdhci-esdhc-imx 2190000.usdhc: No vqmmc regulator found
mmc0: SDHCI controller on 2190000.usdhc [2190000.usdhc] using ADMA
|
|
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
usbcore: registered new interface driver snd-usb-audio
|
|
fsl-asrc 2034000.asrc: driver registered
|
|
NET: Registered protocol family 26
|
协议26
|
NET: Registered protocol family 10
|
协议10
|
sit: IPv6 over IPv4 tunneling driver
|
IPv6
|
NET: Registered protocol family 17
|
协议17
|
can: controller area network core (rev 20120528 abi 9)
|
|
usb 1-1: new high-speed USB device number 2 using ci_hdrc
|
|
NET: Registered protocol family 29
|
协议29
|
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
|
|
Bluetooth: RFCOMM TTY layer initialized
Bluetooth: RFCOMM socket layer initialized
Bluetooth: RFCOMM ver 1.11
Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Bluetooth: BNEP filters: protocol multicast
Bluetooth: BNEP socket layer initialized
Bluetooth: HIDP (Human Interface Emulation) ver 1.2
Bluetooth: HIDP socket layer initialized
|
|
8021q: 802.1Q VLAN Support v1.8
|
|
Key type dns_resolver registered
|
|
ubi0: attaching mtd3
|
|
hub 1-1:1.0: USB hub found
hub 1-1:1.0: 2 ports detected
|
|
random: nonblocking pool is initialized
|
|
usb 1-1.1: new high-speed USB device number 3 using ci_hdrc
|
|
ubi0: scanning is finished
ubi0: attached mtd3 (name "rootfs", size 240 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 1916, bad PEBs: 4, corrupted PEBs: 0
ubi0: user volume: 1, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 17 6716376
ubi0: **ailable PEBs: 0, total reserved PEBs: 1916, PEBs reserved for bad PEB ha ndling: 36
ubi0: background thread "ubi_bgt0d" started, PID 81
|
Unsorted block images file system
physical erase blocks (PEB)
|
dhd_module_init in
|
|
input: gpio-keys as /devices/platform/gpio-keys/input/input2
|
gpio-keys
|
snvs_rtc 20cc000.snvs:snvs-rtc-lp: setting system clock to 2018-05-30 01:40:33 U TC (1527644433)
|
|
gpio_dvfs: disabling
|
|
VSD_3V3: disabling
|
|
can-3v3: disabling
|
|
ALSA device list:
|
|
No soundcards found.
|
|
UBIFS (ubi0:0): recovery needed
UBIFS (ubi0:0): recovery deferred
UBIFS (ubi0:0): UBIFS: mounted UBI device 0, volume 0, name "rootfs", R/O mode
UBIFS (ubi0:0): LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2048 bytes
UBIFS (ubi0:0): FS size: 236683264 bytes (225 MiB, 1864 LEBs), journal size 1180 8768 bytes (11 MiB, 93 LEBs)
UBIFS (ubi0:0): reserved for root: 4952683 bytes (4836 KiB)
UBIFS (ubi0:0): media format: w4/r0 (latest is w4/r0), UUID 043ED19B-DD8***3A5-B 3BD-DCA07BF64283, small LPT model
|
|
VFS: Mounted root (ubifs filesystem) readonly on device 0:14.
|
virtual File System
|
devtmpfs: mounted
|
|
Freeing unused kernel memory: 428K (80b6b000 - 80bd6000)
|
|
INIT: version 2.88 booting
|
|
Starting udev
|
|
udevd[117]: starting version 3.1.5
|
|
UBIFS (ubi0:0): completing deferred recovery
UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 141
UBIFS (ubi0:0): deferred recovery completed
|
|
bootlogd: cannot allocate pseudo tty: No such file or directory
|
|
Chip Version Info: CHIP_8188E_Normal_Chip_TSMC_D_CUT_1T1R_RomVer(0)
|
|
EEPROM ID = 0x8129
|
|
usbcore: registered new interface driver r8188eu
|
|
ALSA: Restoring mixer settings...
|
|
INIT: Entering runlevel: 5
|
|
/usr/sbin/alsactl: load_state:1735: No soundcards found...
|
|
Configuring network interfaces... fec 2188000.ethernet eth0: Freescale FEC PHY d river [Generic PHY] (mii_bus:phy_addr=2188000.ethernet:00, irq=-1)
|
|
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
|
|
udhcpc (v1.24.1) started
|
very small DHCP client program
|
Sending discover...
|
|
Sending discover...
|
|
Sending discover...
|
|
No lease, forking to background
|
|
done.
|
|
Starting system message bus: dbus.
|
|
Starting OpenBSD Secure Shell server: sshd
|
|
done.
|
|
Starting rpcbind daemon...done.
|
|
Starting advanced power management daemon: No APM support in kernel
|
|
(failed.)
|
|
Starting syslogd/klogd: done
|
|
* Starting **ahi mDNS/DNS-SD Daemon: **ahi-daemon
|
|
...done.
|
|
Starting Telephony daemon
|
|
Starting Linux NFC daemon
|
|
Running local boot scripts (/etc/rc.local).
|
|
xres = 480, yres = 272
|
|
Freescale i.MX Release Distro 4.1.15-2.0.1 mys6ull14x14 /dev/ttymxc0
|
|
mys6ull14x14 login:
|
|
需要进一步学习的内容;
image source file--its, device tree source file--dts, itb,dtb,
flattened image tree, FIT uImage, Device Tree Source files(DTS), FDT(flatteneddevice tree)
ARM Architecture, ARM Core, ARM CPU,ARM SOC
设备树动态叠加技术, 添加设备的方法,“启用” 或者 “禁用”设备的方法
通讯方法,编程与调试方法......