首页|资源下载
登录|注册

您现在的位置是:首页 > 技术阅读 >  Buildroot根文件系统权限表、用户表、设备管理难?请看

Buildroot根文件系统权限表、用户表、设备管理难?请看

时间:2022-09-27

导读本文对权限表、用户表、设备表、设备管理以及映象文件如何部署等内容及应用进行总结。

1.权限表

默认Buildroot所有文件均为root用户拥有,并保留在$(TARGET_DIR)中安装它们的权限。

1.1权限

首先弄明白Linux里面权限是怎么管理的,这至关重要,但不需要死记!不需要死记!并不需要死记!重要的事情说三遍!!!

首先能想到的是文件的读写执行权限,即是否可读、可写、可执行;其次Linux是多用户系统,文件是谁的,即所有权,在多用户的基础上Linux加了一个组Group的概念,有组的概念了,那么组外的Linux称其为Others(是不是类似属性学的集合概念?)。所以由多用户这个点出发,就引入了user,group,others属性。当然Linux原始设计是不是这么想的我不知道,但是我是这样去理解的。

那么具体地如下面文件夹执行ls -l

lib/gcc/arm-none-linux-gnueabi/4.3.3/

以第一行文件夹armv4t为例:

前面说不要记,是说不要死记,那么怎么记呢,见红色框里的注释,用英文意义看一眼就自然记住了。

至于文档类型:

  • d代表的是目录(directroy)

  • -代表的是文件(regular file)

  • s代表的是套字文件(socket)

  • p代表的管道文件(pipe)或命名管道文件(named pipe)

  • l代表的是符号链接文件(symbolic link)

  • b代表的是该文件是面向块的设备文件(block-oriented device file)

  • c代表的是该文件是面向字符的设备文件(charcter-oriented device file)

还有一个地方需要解释的是上面的10代表的含义,1表示对应位权限使能,0表示关闭。

对于设置文件权限,可用chmod命令,设置文件用户所有属性可用chown,设置组可用chgrp,具体命令的用法可容易查询到,这里不罗嗦了。

另,用户与组是可能不一样的,即几个用户可以属于同一组。root为超级用户,root组为超级用户组。可以新建一个超级用户名叫xxx,那么root与xxx都同属于超级用户root组。


1.2 Buildroot配置权限表

对于Buildroot而言,默认所有文件root用户拥有,并具有在$TARGET_DIR)中安装的权限。如要自定义已安装文件的所有权或权限,可以创建一个或多个权限表:

  •  BR2_ROOTFS_DEVICE_TABLE包含一个以空格分隔的权限表文件列表。选项名称仅出于向后兼容的原因而包含设备。

  • Buildroot 默认情况下使用

    system /device_table.txt文件。

  • 例如:

  • major, minor, start, inc 以及 count 属性域不使用,全部设置为-.

除了用户表之外, 也可以利用变量<pkg>_PERMISSIONS

对某个软件包进行权限配置 。其用法如下:

例如其默认对SUDO的配置:


说了这么多,为啥要讨论呢?why? 没用就憋这费劲了,比如:

  • 需要部署一个web server在设备,那么对于www文件的内容,你的应用需要对这个文件夹具有所有权,使用权,那么就可以在根文件构建的时候直接利用权限表进行配置

  • 再比如,写了个应用程序对其中的数据文件也需要具有所有权,使用权。

  • ...

要对不同的应用配置文件或文件夹的权限,一般做法会为这些相应的应用建立用户,并对这些文件/文件夹具有所需的权限,那么问题来了,我们自然就需要在构建根文件系统的时候将对应的用户直接构建进根文件系统。当然这不是唯一方法,比如我们可以写一个脚本在系统第一次上电的时候,用命令去完成这些操作。但文中所描述的方法,无疑提供了极大的便利。


2.用户表

Buildroot除了默认框架中可用的用户和组之外,可能还需要添加特定的Unix用户和组。可利用配置项 BR2_ROOTFS_USERS_TABLES进行指定用户表,其语法是用空格分隔的用户表列表。比如:

除了利用用户表进行配置之外,也可以利用变量<pkg>_USERS对包进行用户配置,这与包的权限配置类似。其用法如下:

比如:


3.设备表

在B当系统使用静态/ dev时,可能需要创建其他设备节点

在Buildroot中,当系统使用静态/dev时,可能需要创建其他设备节点,但这种做法并不推荐,实现细节太过复杂,默认情况使用system /device_table_dev.txt文件

这里截一部分作为例子:


软件包需要额外的设备时,可以使用变量<pkg>_DEVICES 进行配置,还可以指定自己的设备文件。 如:

注:Xenomai 是一种采用双内核机制的Linux 内核的强实时扩展。优先级高于Linux 内核,它负责处理系统的实时任务。自百度百科。


既然使用静态设备管理机制,不为推荐,那么Buildroot还可以选择哪些方式进行设备管理呢:

  • 使用devtmpfs。/ dev由内核devtmpfs管理,内核会自动创建设备文件。默认选项。

  • 使用mdev。mdev是Busybox的一部分,可以在添加/删除设备时运行自定义操作。需要devtmpfs内核支持。

  • 使用eudev。由systemd创建进程,允许运行自定义操作。需要devtmpfs内核支持。用systemd时,唯一的选择是systemd本身的udev。

<-END->

码字不易不妨点点在看或小小打赏,关注公号领海量资料

加群请扫描右下二维码,发送“加群”