使用systemd启动方式制作buildroot根文件系统

目录

1、make menuconfig 将busybox改成systemd

2、解决错误

(1)id: ‘privoxy’: no such user

(2)g++: fatal error: Killed signal terminated program cc1plus

(3)error: .obj/qwidget.o: requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC

(4)mkfs.ext4: Could not allocate block in ext2 filesystem while populating file system


移植蓝牙驱动需要使用到systemctl命令,但是根文件系统中没有,我只能修改buildroot。

系统的初始化方式有多种:

busybox(集成了很多常用的命令)、

systemd(一种服务管理机制,很复杂,大大减慢了系统启动,systemctl是其主要命令)、

System V init(比较老的方式,service命令出自它)

1、make menuconfig 将busybox改成systemd

在按照正点教程使用busybox方式配置好了buildroot,然后make menuconfig搜索systemd,定位到具体位置,将busybux改为systemd,再make -j12编译。
注意systemd依赖glibc库,先选中这个库:在Toolchain下的C library中先选择glibc。

2、解决错误

(1)id: ‘privoxy’: no such user


编译时报错: 

Installing templates to /home/wang/linux/buildroot/buildroot-2020.02.6/output/target/etc/templates
id: ‘privoxy’: no such user
******************************************************************
 WARNING! WARNING! installing config files as root!
 It is strongly recommended to run privoxy as a non-root user,
 and to install the config files as that user and/or group!
 Please read INSTALL, and create a privoxy user and group!
*******************************************************************
GNUmakefile:800: recipe for target 'install' failed
make[1]: *** [install] Error 1
make[1]: Leaving directory '/home/wang/linux/buildroot/buildroot-2020.02.6/output/build/privoxy-3.0.26'
package/pkg-generic.mk:360: recipe for target '/home/wang/linux/buildroot/buildroot-2020.02.6/output/build/privoxy-3.0.26/.stamp_target_installed' failed

我不需要privoxy。
在make menuconfig中搜索privoxy,不选中它,再重新make。

(2)g++: fatal error: Killed signal terminated program cc1plus

又出错:

g++: fatal error: Killed signal terminated program cc1plus


原因是虚拟机的内存不够,添加虚拟内容swap。

sudo dd if=/dev/zero of=/swapfile bs=1M count=2048    # 1 * 2048 = 2048 创建 1 g 的内存分区
sudo mkswap /swapfile
sudo swapon /swapfile
# free -m    #可以查看内存使用
# 创建完交换分区之后就可以继续编译
# 编译完之后记得用以下命令关闭交换分区
# 某次我就是忘了关闭交换分区,导致开不了机,然后切换 tty1 ,登进去之后关闭交换分区才可以进入桌面的。
#2. 关闭分区
sudo swapoff /swapfile
sudo rm /swapfile

(3)error: .obj/qwidget.o: requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC

编译再次遇到问题:

/usr/local/arm/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin/../lib/gcc/arm-none-linux-gnueabihf/9.2.1/../../../../arm-none-linux-gnueabihf/bin/ld.gold: error: .obj/qwidget.o: requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC


这个问题没找到解决方案。

我make clean,重新改成systemd,再make

(4)mkfs.ext4: Could not allocate block in ext2 filesystem while populating file system


又报错: 

Copying files into the device: __populate_fs: Could not allocate block in ext2 filesystem while writing file "oldphone.wav"
mkfs.ext4: Could not allocate block in ext2 filesystem while populating file system
*** Maybe you need to increase the filesystem size (BR2_TARGET_ROOTFS_EXT2_SIZE)

根据提示,我把配置BR2_TARGET_ROOTFS_EXT2_SIZE由一开始的60M改成了500M,这次终于编译通过了!

实际编译得到的rootfs.tar大小是167,只要BR2_TARGET_ROOTFS_EXT2_SIZE比167大即可。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: systemd 在引导过程中会挂载文件系统。在大多数情况下,这是在内核完成初始化并运行第一个用户空间进程之后发生的。 具体来说,systemd 会在内核完成设备枚举和初始化后,并且在执行第一个用户空间进程之前,挂载文件系统。这个进程通常是 `systemd-initctl`。 ### 回答2: systemd是一个Linux系统的init系统和服务管理器。它在系统启动的过程中,负责控制各个进程的启动和管理。 对于挂载文件系统systemd在整个启动过程中的早期阶段就会进行。具体来说,systemd会在系统引导和加载内核之后立即进行文件系统的挂载。 要实现这一过程,systemd会读取/boot目录下的配置文件,例如bootloader(如GRUB)提供的配置文件,或者systemd专用的配置文件。通过这些配置文件,systemd可以确定正确的文件系统分区,并将其挂载到对应的挂载点上。 在文件系统挂载之前,systemd还会进行一些其他重要的操作,如加载必要的驱动程序、激活关键系统服务等。这些操作的成功与否对系统的正常启动起着至关重要的作用。 总的来说,systemdLinux系统引导的早期阶段就会挂载文件系统。通过合理的配置文件和有序的操作,systemd可以确保文件系统的正确挂载,从而保证系统能够正常启动并提供各种服务。 ### 回答3: systemd是一个负责管理和控制Linux操作系统的init系统和系统管理守护进程。在Linux系统启动过程中,systemd负责挂载文件系统。 具体来说,在Linux系统启动时,BIOS或UEFI引导加载程序会启动initramfs(init ramdisk),这是一个压缩文件系统,包含了用于挂载文件系统所需的初始化程序、驱动程序和工具等。initramfs会被加载到内存中,并运行其中的init程序。 init程序的任务之一就是在启动阶段挂载文件系统。它会据配置文件中的指示,查找并识别文件系统所在的设备,并将其挂载到指定的挂载点。 systemd在这个过程中发挥重要作用。init程序会调用systemd的相关功能,以实现文件系统的挂载。systemd会在系统启动过程中检测可用的存储设备,并识别出文件系统所在的设备。然后,它会据挂载点的配置信息,在指定的挂载点将文件系统成功挂载上。 需要说明的是,systemd不仅仅在启动阶段挂载文件系统,它还负责其他相关的系统初始化和管理任务,如进程管理、服务管理和日志记录等。它的设计目标是提供更加高效、可靠和可扩展的系统启动和管理方式,以满足现代化Linux系统的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汉尼拔勇闯天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值