排行榜 统计
  • 文章总数:1688 篇
  • 评论总数:5 条
  • 分类总数:8 个
  • 最后更新:2天前
原创程序人生

ARM-Linux 知识

本文阅读 8 分钟
首页 程序人生 正文

开发板通常采用 SOC,市面流通产品通常包括集成部分功能通用开发平台的核心板(参考 Virbox 核心板)和成品开发版(rk3399,三星6818等)。
摄图网_1622950939.png

权限

root 和用户

具有开发板的开发者拥有root权限,但对于将应用部署在别人的环境下的开发者,受限于平台厂商的要求,可能并没有 root 权限。

文件权限

root 用户可以查看所有系统文件,包括普通用户目录下的文件。

普通用户,可以查看部分系统目录文件权限,但无法修改和新建。

用户权限

用户只有在 home 的目录下当前的文件路径下才拥有完整权限。

查看所有用户拥有权限目录:

切换家目录:cd ~

系统目录与文件

Linux 所有目录有明确的约定,区分不同类型的文件(依赖库、可执行文件、配置文件等)。

隐藏

隐藏目录和文件,目录名称或文件名称第一个字符是 .,文件会对所有用户隐藏,只有通过指定查看隐藏文件参数才可以看到(可以参考 Windows 隐藏文件)。

TODO 修改文件权限,可以隐藏普通文件名。

查看隐藏文件:ls -a

隐藏文件的安全性一般,通过指定命令可以查看;但可以避免用户误删文件。

Linux 系统中通常使用隐藏文件完成以下功能:

  1. 部分配置,保存在隐藏文件或目录下。例如:

    firefly@firefly:~/.local/share$ pwd
    /home/firefly/.local/share
    /home/firefly/.local/sharefirefly@firefly:~/.local/share$ ls
    applications  gnome-software  gvfs-metadata  keyrings  recently-used.xbel
  2. vi 或 vim 编辑文件,当因为无权限修改文件后无法保存,退出后再次打开时会提示冲突,与源文件不同,是否需要修改等选项。其实在文档的同级目录下有一个临时文件生成,删除临时文件后,再次打开源文件不会提示“继续编辑”。

临时目录

/tmp

所有用户都有权限访问,约定存放临时文件,部分系统可能会定期清理临时目录。

/usr/tmp

部分 ARM-Linux 系统默认没有 /usr/tmp ,部分当前目录只有部分用户有权限。

唯一硬件信息不可靠

  • 嵌入式开发板,SOC架构的芯片,小作坊规模的厂商可以生产,在当前的环境下没有唯一的ID信息。
  • Linux系统开源,ARM-Linux 可以裁剪系统,通过系统应用层接口获取信息都不可靠。

获取可靠的硬件唯一ID

  1. 外置设备,例如竞品(Bitanswer)的比特精灵,提供唯一设备ID。
  2. 内置芯片,华为海思芯片生产时会给每一个芯片提供唯一ID。
  3. Virbox 核心板,核心板内置精锐5,精锐5出厂预设分配设备ID不重复。

硬件信息

系统映射

Linux 系统启动后,会将硬件信息映射到系统文件,所有用户权限(普通用户和root)可以查看,但不能修改。

映射到系统的文件,虽然在系统启动后无法更改,但不排除开发者通过修改 Linux 系统源码,来修改获取到的信息内容(未验证),例如:映射的硬件信息。

CPU

  • 系统映射

    • /proc/cpuinfo
  • 查看信息

    • cat /proc/cpuinfo 查看基本信息,所有版本的系统都支持。
    • lscpu,部分系统支持(与 Linux 系统裁剪设置有关)。

CPU唯一序列号(不可靠)

部分厂商提供,可以通过 /proc/cpuinfo 获取,完全依赖于厂商(或核心板制造商)的策略。

访问 /proc/cpuinfo 文件,获取 CPU 信息,不同的板卡,CPU上显示的信息不同。

firefly@firefly:/sys/class/net$ cat /proc/cpuinfo
processor    : 0
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer    : 0x41
CPU architecture: 8
CPU variant    : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor    : 1
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer    : 0x41
CPU architecture: 8
CPU variant    : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor    : 2
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer    : 0x41
CPU architecture: 8
CPU variant    : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor    : 3
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer    : 0x41
CPU architecture: 8
CPU variant    : 0x0
CPU part    : 0xd03
CPU revision    : 4

processor    : 4
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer    : 0x41
CPU architecture: 8
CPU variant    : 0x0
CPU part    : 0xd08
CPU revision    : 2

processor    : 5
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer    : 0x41
CPU architecture: 8
CPU variant    : 0x0
CPU part    : 0xd08
CPU revision    : 2

Serial        : a8585fa55c006dc0

注意:Serial 字段,并非所有的 CPU 都有,部分厂商提供的开发板并无 Serial 信息。

网卡

网卡信息包括:网卡名称、IP地址、MAC地址

所有联网开发板都有唯一的MAC地址,并且在所在的局域网内必须保证唯一,一旦MAC地址冲突,就会造成无法接入局域网的问题,可以作为设备运行状态的标识。

  • 系统映射

    • /sys/class/net
  • 查看信息

    • ifconfig

配置静态IP

修改 /etc/network/interfaces 文件,修改格式参考以下内容:

firefly@firefly:/etc/network$ cat interfaces 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
#iface eth0 inet dhcp
   iface eth0 inet static   
   address 10.10.1.7
   netmask 255.255.255.0   
   network 10.10.1.1
   broadcask 10.10.1.255   
   gateway 10.10.1.1 
   dns-nameservers 10.10.2.88
   dns-nameservers 10.10.2.89

系统映射

/sys/class/net ,网卡信息在系统加载后会保存在系统运行目录,并根据网卡名称分别存放在不同的目录下。

firefly@firefly:/sys/class/net$ ls -l
total 0
lrwxrwxrwx 1 root root 0 Dec 16 12:28 eth0 -> ../../devices/platform/fe300000.ethernet/net/eth0
lrwxrwxrwx 1 root root 0 Dec 16 12:28 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 Dec 16 12:28 wlan0 -> ../../devices/platform/fe310000.dwmmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:2/net/wlan0
firefly@firefly:/sys/class/net$ cd eth0
firefly@firefly:/sys/class/net/eth0$ ls
addr_assign_type  address    carrier          dev_id    device   duplex  gro_flush_timeout  ifindex  link_mode  name_assign_type  operstate     phys_port_name  power       queues  statistics  tx_queue_len  uevent
addr_len          broadcast  carrier_changes  dev_port  dormant  flags   ifalias            iflink   mtu        netdev_group      phys_port_id  phys_switch_id  proto_down  speed   subsystem   type
firefly@firefly:/sys/class/net/eth0$ cat address 
2a:8c:c3:82:e5:5e

备注:通过读取 address 文件,即可获得网卡的 MAC 地址。

内存

内存总量在开发板出厂后不会发生改变,可以作为设备的硬件标识之一。

  • 系统映射

    • 基本信息:/proc/meminfo,包括内存(总量)以及使用系统运行过程中变化的数据(可用内存、空闲内存等)
  • 查看命令

    • cat /proc/meminfo

查看内存信息

firefly@firefly:~/.local/share$ cat /proc/meminfo
MemTotal:        2007992 kB
MemFree:         1064168 kB
MemAvailable:    1693528 kB
Buffers:           62484 kB
Cached:           517568 kB
SwapCached:            0 kB
Active:           501096 kB
Inactive:         257736 kB
Active(anon):     179368 kB
Inactive(anon):    13464 kB
Active(file):     321728 kB
Inactive(file):   244272 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               260 kB
Writeback:             0 kB
AnonPages:        178804 kB
Mapped:           194828 kB
Shmem:             14052 kB
Slab:             116008 kB
SReclaimable:      86016 kB
SUnreclaim:        29992 kB
KernelStack:       25392 kB
PageTables:         6400 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1003996 kB
Committed_AS:    1975780 kB
VmallocTotal:   258867136 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB

存储(分区)

内置存储、多媒体存储都属于存储范围。

  • 系统映射

    • /proc/partitions,存储块基本信息
    • /sys/block/mmcblk0/device/,存储块 mmcblk0 信息。
  • 查看命令

    • cat /proc/partitions

存储CID(唯一标识)

/sys/block/mmcblk0/device/cid,读取存储映射在系统目录下的文件,cid 即存储ID。

局限性:只有在 mmcblk0 类型的存储才能获得 CID ,否则如 mtdblock(SOC-Virbox 核心板)并未 CID 属性,无法获取。

firefly@firefly:/sys/block/mmcblk0/device$ ls
block  driver                erase_size   life_time  oemid                 prv                 serial
cid    dsr                   ffu_capable  manfid     power                 raw_rpmb_size_mult  subsystem
csd    enhanced_area_offset  fwrev        name       pre_eol_info          rel_sectors         type
date   enhanced_area_size    hwrev        ocr        preferred_erase_size  rev                 uevent
firefly@firefly:/sys/block/mmcblk0/device$ 
firefly@firefly:/sys/block/mmcblk0/device$ cat cid csd 
150100414a4e423452076d3eb6957400
d02701320f5903fff6dbffef8e404000

/proc/partitions 分析

对比没有外接任何存储,外接USB存储,外接SDCard时系统信息有何不同,确认 ARM 下如何获取有效的 partitions 信息。

一、原始-partitions_1_ori

没有外接任何设备的磁盘信息
major minor #blocks name
1 0 4096 ram0
179 0 15267840 mmcblk0
179 1 4096 mmcblk0p1
179 2 4096 mmcblk0p2
179 3 32768 mmcblk0p3
179 4 32768 mmcblk0p4
179 5 15083503 mmcblk0p5
179 96 4096 mmcblk0rpmb
179 64 4096 mmcblk0boot1
179 32 4096 mmcblk0boot0

二、增加U盘-partitions_2_U

外接U盘
major minor #blocks name
1 0 4096 ram0
179 0 15267840 mmcblk0
179 1 4096 mmcblk0p1
179 2 4096 mmcblk0p2
179 3 32768 mmcblk0p3
179 4 32768 mmcblk0p4
179 5 15083503 mmcblk0p5
179 96 4096 mmcblk0rpmb
179 64 4096 mmcblk0boot1
179 32 4096 mmcblk0boot0
8 0 3584000 sda ------- 与 partitions_1_ori 不同
8 1 3583984 sda1 ------- 与 partitions_1_ori 不同
其中,sda 和 sda1 是新增的存储空间。

三、增加存储卡-partitions_3_SDCard

外接SDCard
major minor #blocks name
1 0 4096 ram0
179 0 15267840 mmcblk0
179 1 4096 mmcblk0p1
179 2 4096 mmcblk0p2
179 3 32768 mmcblk0p3
179 4 32768 mmcblk0p4
179 5 15083503 mmcblk0p5
179 96 4096 mmcblk0rpmb
179 64 4096 mmcblk0boot1
179 32 4096 mmcblk0boot0
179 128 31166976 mmcblk2 ------- 与 partitions_1_ori 不同
179 129 262144 mmcblk2p1 ------- 与 partitions_1_ori 不同
179 130 30896640 mmcblk2p2 ------- 与 partitions_1_ori 不同
其中mmcblk2前缀的为外置新增的存储设备。

小结
  1. 相比 /proc/cpuinfo 和 /proc/meminfo 不会发生变更,存储作为 ARM 开发板的一部分,板卡生产时已经具备基本的存储,可以作为有效硬件信息的一部分。
  2. 收集信息。(1)收集 ram(0-n) 前缀的信息;(2)收集 mmcblk0 的信息(总存储空间大小),mmcblk0p1, mmcblk0p2 等都是拆分的逻辑存储(类似虚拟分区的概念)。
原创文章,作者:Firshare,如若转载,请注明出处:https://typecho.firshare.cn/archives/2540.html
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。避免网络欺诈,本站不倡导任何交易行为。如您私自与本站转载自公开互联网中的资讯内容中提及到的个人或平台产生交易,则需自行承担后果。本站在注明来源的前提下推荐原文至此,仅作为优良公众、公开信息分享阅读,不进行商业发布、发表及从事营利性活动。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。
-- 展开阅读全文 --
python教程视频-视频+资料+电子书
« 上一篇 11-03
为什么要使用python做数据分析?
下一篇 » 11-03