4. 查看开发板系统信息¶
当我们新购入一台笔记本电脑或者是台式机时,都免不了会去看看它的CPU型号,内存容量以及硬盘的使用情况等等。 对于Linux开发板来说,实际上也相当于一台小型电脑,虽然距离传统PC可能有差别,但是麻雀虽小,五脏俱全,我们同样希望去查看开发板的这些相关信息。
本章中介绍的内容大部分不仅适用于开发板,大部分也适用于开发主机中的Ubuntu系统,请尝试在两种平台上执行相关的命令查看信息,比较差异。
4.1. 初探/proc目录¶
Linux没有提供类似Windows的任务管理器,但是它将系统运行的信息都记录在/proc目录下的文件中, 用户可以通过访问该目录下的文件获取对应的系统信息。
请在开发板的终端下执行如下命令查看/proc目录的内容:
1 2 | #在开发板的终端执行以下命令
ls /proc
|
打印信息如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | root@npi:~# ls /proc
1 17 249 33 72 9 crypto kmsg slabinfo
10 194 25 330 73 90 device-tree kpagecgroup softirqs
104 198 259 335 75 91 devices kpagecount stat
105 2 26 336 76 95 diskstats kpageflags swaps
106 20 27 337 77 96 driver loadavg sys
107 204 278 34 78 97 execdomains locks sysrq-trigger
11 206 28 345 79 98 fb meminfo sysvipc
12 208 286 35 8 asound filesystems misc thread-self
124 21 289 350 80 buddyinfo fs modules timer_list
13 219 29 36 82 bus interrupts mounts tty
137 22 291 37 83 cgroups iomem mtd uptime
14 229 3 38 84 cmdline ioports net version
15 230 30 4 86 config.gz irq pagetypeinfo vmallocinfo
16 233 31 69 87 consoles kallsyms partitions vmstat
161 24 32 70 88 cpu key-users scsi zoneinfo
163 243 327 71 89 cpuinfo keys self
root@npi:~#
|
该目录下各文件包含的信息如下表所示。
表 /proc文件结构
文件名 |
作用 |
---|---|
pid* |
“pid*”通常就是一个数字,该数字表示的是进程的 PID 号,系统中当前运行的每一个进程都有对应的一个目录,用于记录进程所有相关信息。对于操作系统来说,一个应用程序就是一个进程 |
self |
该文件是一个软链接,指向了当前进程的目录,通过访问/proc/self/目录来获取当前进程的信息,就不用每次都获取pid |
thread-self |
该文件也是一个软链接,指向了当前线程,访问该文件,等价于访问“当前进程pid/task/当前线程tid”的内容。一个进程,可以包含多个线程,但至少需要一个进程,这些线程共同支撑进程的运行。 |
version |
记录了当前运行的内核版本,通常可以使用“uname –r”命令查看 |
cpuinfo |
记录系统中CPU的提供商和相关配置信息 |
modules |
记录了目前系统加载的模块信息 |
meminfo |
记录系统中内存的使用情况,free命令会访问该文件,来获取系统内存的空闲和已使用的数量 |
filesystems |
记录内核支持的文件系统类型,通常mount一个设备时,如果没有指定文件系统并且它无法确定文件系统类型时,mount会尝试包含在该文件中的文件系统,除了那些标有“nodev”的文件系统。 |
通过访问/proc文件夹的内容,就可以得到我们想要的系统信息。
4.2. 查看CPU信息¶
/proc/cpuinfo文件存储了CPU的信息,可通过如下命令查看:
1 | cat /proc/cpuinfo
|
打印信息如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | processor : 0
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 48.00
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
processor : 1
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 48.00
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
Hardware : STM32 (Device Tree Support)
Revision : 0000
Serial : 001B003E3438511536383238
root@npi:~#
|
从上图可以看到,我们使用的硬件平台是STM32 (Device Tree Support), 是一款ARMv7架构的双核处理器(Cortex-A7内核是ARMv7架构的)。
4.3. 查看内核版本¶
/proc/version文件保存了内核的版本信息,我们可以通过如下命令来获取。
1 | cat /proc/version
|
打印信息如下
1 | Linux version 4.19.94-stm-r1 (jinsheng@ebf-dev) (gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)) #1 SMP PREEMPT Fri Mar 12 08:59:06 CST 2021
|
从上图中我们可以看到当前使用的内核版本是4.19.94。
也可以通过如下命令获取:
1 | uname –a
|
打印信息如下
1 | Linux npi 4.19.94-stm-r1 #1 SMP PREEMPT Fri Mar 12 08:59:06 CST 2021 armv7l GNU/Linux
|
4.4. 查看内存信息¶
内核将内存的使用情况记录在/proc/meminfo文件中,我们可以通过读取该文件的内容,来了解我们内存的使用情况:
1 | cat /proc/meminfo
|
打印信息如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | MemTotal: 955500 kB
MemFree: 851800 kB
MemAvailable: 879672 kB
Buffers: 5648 kB
Cached: 36164 kB
SwapCached: 0 kB
Active: 30076 kB
Inactive: 24600 kB
Active(anon): 12936 kB
Inactive(anon): 7248 kB
Active(file): 17140 kB
Inactive(file): 17352 kB
Unevictable: 16 kB
Mlocked: 16 kB
HighTotal: 262140 kB
HighFree: 205460 kB
LowTotal: 693360 kB
LowFree: 646340 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 12876 kB
Mapped: 16836 kB
Shmem: 7324 kB
Slab: 32172 kB
SReclaimable: 11860 kB
SUnreclaim: 20312 kB
KernelStack: 760 kB
PageTables: 664 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 477748 kB
Committed_AS: 95916 kB
VmallocTotal: 245760 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
Percpu: 296 kB
CmaTotal: 131072 kB
CmaFree: 128964 kB
|
在实际应用中,我们一般都不会直接去读取该文件的内容,而是使用下面的命令来获取内存的相关信息。
通过free命令查看系统的内存大小:
1 | free -h
|
如下所示,输出信息共有三行,六列。其中第一行记录了我们的内存使用情况, 可以看到我们内存容量为933M,当前已使用了48M,还剩下831M可用。 shared表示表示的是多个进程共享的内存总量,这里只占有了7M字节; buff/cached表示当前磁盘缓存的大小为52M字节。
打印信息如下
1 2 3 | total used free shared buff/cache available
Mem: 933Mi 48Mi 831Mi 7.0Mi 52Mi 858Mi
Swap: 0B 0B 0B
|
4.5. 查看FLASH存储器容量¶
/proc/partitions文件包含了存储器的分区信息,查看分区信息可以了解板载FLASH存储器的容量。
可使用如下命令查看:
1 | cat /proc/partitions
|
它输出的表示存储器Blocks的数量,对于本示例的开发板,eMMC的每个Block大小为512Byte。
使用8GB eMMC开发板的命令输出信息如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | major minor #blocks name
1 0 65536 ram0
1 1 65536 ram1
1 2 65536 ram2
1 3 65536 ram3
1 4 65536 ram4
1 5 65536 ram5
1 6 65536 ram6
1 7 65536 ram7
1 8 65536 ram8
1 9 65536 ram9
1 10 65536 ram10
1 11 65536 ram11
1 12 65536 ram12
1 13 65536 ram13
1 14 65536 ram14
1 15 65536 ram15
179 0 7634944 mmcblk1
179 1 2048 mmcblk1p1
179 2 102400 mmcblk1p2
179 3 512 mmcblk1p3
179 4 7529455 mmcblk1p4
|
其中的mmcblk开头的都是属于eMMC存储器的数据块,把它们所有的Blocks加起来就可以算出容量(每个Block大小为512Byte):
7634944+2048+102400+512+7529455 (Block)
=15269359*512(Byte)
=15269359*512/1024/1024/1024 (GByte)
≈7.3 GByte
算出的最终结果比8GB小一点,这跟SD卡标称值比实际值小的原因一样,不要纠结。
也可使用lsblk命令查看存储器容量
1 | lsblk
|
打印信息如下
1 2 3 4 5 6 7 8 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk1 179:0 0 7.3G 0 disk
├─mmcblk1p1 179:1 0 2M 0 part
├─mmcblk1p2 179:2 0 100M 0 part /boot
├─mmcblk1p3 179:3 0 512K 0 part
└─mmcblk1p4 179:4 0 7.2G 0 part /
mmcblk1boot0 179:16 0 4M 1 disk
mmcblk1boot1 179:32 0 4M 1 disk
|
4.6. 查看任务进程¶
在/proc文件夹下,有很多以数字命名的文件夹,这些文件夹是用来记录当前正在运行的进程状态, 文件名则是他们的pid号,每一个进程都对应一个pid号,用于辨识。这些进程文件夹中包含的内容, 基本上是大同小异的。使用ls命令,来查看pid为1的文件夹内容,如下图所示。 其中,fd记录里当前进程使用的文件描述,mountinfo记录了挂载信息, mem则记录了该进程的内存使用情况等。
1 2 3 4 5 6 7 8 9 | root@npi:/proc# ls 1
auxv exe mounts personality syscall
cgroup fd mountstats root task
clear_refs fdinfo net smaps timerslack_ns
cmdline limits ns smaps_rollup wchan
comm map_files oom_adj stack
coredump_filter maps oom_score stat
cwd mem oom_score_adj statm
environ mountinfo pagemap status
|
除了上面使用的这种方式,常用的还有top命令。该命令的功能类似于windows的任务管理器, 执行效果如上图所示,该命令可以会实时地更新每个进程的使用情况, 按下“q”键或“Ctrl + C”,就可以退出该命令。
1 | top
|
打印信息如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | top - 06:39:49 up 33 min, 1 user, load average: 0.16, 0.14, 0.09
Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 1.0 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 933.1 total, 828.9 free, 49.8 used, 54.5 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 858.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
84 root 20 0 0 0 0 I 1.3 0.0 0:32.96 kworker/0+
458 root 20 0 6412 2400 2064 R 0.7 0.3 0:00.07 top
1 root 20 0 30408 7248 5300 S 0.0 0.8 0:10.24 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu+
9 root 20 0 0 0 0 S 0.0 0.0 0:00.27 ksoftirqd+
10 root 20 0 0 0 0 I 0.0 0.0 0:00.74 rcu_preem+
11 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_sched
12 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh
13 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration+
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
16 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration+
17 root 20 0 0 0 0 S 0.0 0.0 0:00.10 ksoftirqd+
20 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kdevtmpfs
|
4.7. 查看支持的文件系统¶
/proc/filesystems可以用来查看内核支持的文件系统类型,如上图所示。图中有部分文件系统前带有“nodev”标志, 表示这些文件系统不需要挂载块设备,如网络文件系统nfs/nfs4,伪文件系统sysfs等。
1 | cat /proc/filesystems
|
打印信息如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | nodev sysfs
nodev rootfs
nodev ramfs
nodev bdev
nodev proc
nodev cgroup
nodev cgroup2
nodev tmpfs
nodev devtmpfs
nodev configfs
nodev debugfs
nodev tracefs
nodev sockfs
nodev pipefs
nodev rpc_pipefs
nodev devpts
ext3
ext2
ext4
squashfs
vfat
msdos
nodev nfs
nodev nfs4
ntfs
nodev jffs2
nodev autofs
nodev overlay
nodev mqueue
nodev ubifs
nodev pstore
|
4.8. 查看CPU当前主频¶
除了/proc目录外,在/sys目录也可以查看一些系统相关的信息, 如文件/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq包含了CPU当前的主频信息, 若系统存在该文件,可以把它的内容输出来查看:
1 | cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
|
打印信息如下
1 2 | root@npi:/proc# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
650000
|
如上图中的输出,表示当前CPU主频为650MHz。