我已经看到在多个 yocto 配方中使用了以下安装命令
install -d ${D}${libdir}
Run Code Online (Sandbox Code Playgroud)
我知道 install 命令及其用途,但是我无法理解 ${D} 变量的用途,因为它通常没有在配方中定义。有人可以解释这个shell变量的用途吗?
我正在使用 TS-4900,这是一个插入基板的嵌入式“计算机模块”,运行 Yocto Linux。它使用 U-Boot 启动,据说它会根据底板的型号选择正确的 dtb 文件来启动,如果它无法找到正确的文件,它可能会回退到我的模块的“通用”文件。
但是它如何/在哪里确定正确的?我如何知道使用了哪个 .dtb,或者设置应该使用哪个?
下面是 U-Boot 的启动信息。
U-Boot 2014.10-g3ac6ec3 (Jan 29 2015 - 17:20:15)
CPU: Freescale i.MX6SOLO rev1.1 at 792 MHz
Reset cause: POR
Board: TS-4900
Revision: C
Watchdog enabled
I2C: ready
DRAM: 1 GiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
SF: Detected N25Q64 with page size 256 Bytes, erase size 4 KiB, total 8 MiB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: using phy at 7 …Run Code Online (Sandbox Code Playgroud) 我写了一篇《你好,世界!》myCFile.cDebian 操作系统 x86 嵌入式板上的C 文件。
#include <stdio.h>
int main()
{
printf("hello\n")
}
Run Code Online (Sandbox Code Playgroud)
我编译程序:gcc myCFile.c
然而,
tester@localhost:~/test$ ./a.out
-bash: ./a.out: Permission denied
tester@localhost:~/pravin$ ls -lrt
total 44
-rwxrwxrwx 1 tester test 54 Sep 7 07:33 myCFile.c
-rwxrwxrwx 1 tester test 16608 Sep 7 07:33 a.out
Run Code Online (Sandbox Code Playgroud)
但是,如果我复制a.out到/run/user/1000,我可以执行它。
tester@localhost:/run/user/1000$ ls
a.out bus gnupg systemd
Run Code Online (Sandbox Code Playgroud)
另外,当我用root用户编译C文件并执行它时,我可以执行它。我可以执行它。
root@localhost:~# gcc myCFile.c
root@localhost:~# ./a.out
hello
root@localhost:~#
Run Code Online (Sandbox Code Playgroud)
是不是跟NOEXEC国旗有关系?
我的/etc/fstab文件:
# Begin /etc/fstab
/dev/root / ext4 defaults …Run Code Online (Sandbox Code Playgroud) 我正在开发 yocto 发行版,包括 2.3.2 版本中的 cryptsetup
我在具有 1 GB RAM 的主板上运行此类发行版,在尝试打开无法正确调试的加密分区时遇到“内存不足”错误。有任何想法吗?
我的发行版从具有 3 个分区的 mSD 运行;第三个 (30 MB) 是加密的。
我使用ArchLinux 指南中描述的步骤来加密该分区,使用 ext3 而不是 ext4
# cryptsetup -y -v luksFormat /dev/sda2
# cryptsetup open /dev/sda2 cryptroot
# mkfs.ext3 /dev/mapper/cryptroot
Run Code Online (Sandbox Code Playgroud)
但尝试在我的主板上打开该分区会引发错误:
cryptsetup --debug open /dev/mmcblk0p3 cryptroot
# cryptsetup 2.3.2 processing "cryptsetup --debug open /dev/mmcblk0p3 cryptroot"
# Running command open.
# Locking memory.
# Installing SIGINT/SIGTERM handler.
# Unblocking interruption on signal.
# Allocating context for crypt device /dev/mmcblk0p3.
# Trying …Run Code Online (Sandbox Code Playgroud) 我正在使用 Yocto 为电路板构建图像。我已禁用该root用户。我正在添加一个新用户,可以说adminuser1。在我看来,adminuser1作为管理员有两种选择。
adminuser1到 /etc/sudoers 中的 sudoers/etc/sudoers.d/0001_admin1并添加一行adminuser1 ALL=(ALL) ALL默认/etc/sudoers有sudo组评论# %sudo ALL=(ALL) ALL
我试图了解哪种方法在安全方面是更好的方法:
adminuser1到sudo组并取消注释# %sudo ALL=(ALL) ALLin/etc/sudoers/etc/sudoers.d/0001_admin1仅adminuser1 ALL=(ALL) ALL在文件中添加和添加。在 git 中跟踪 bitbake 配置和使用的层的正确方法是什么?
我已经成功地使用 Yocto 为我自己编译的 Linux 内核源代码构建了图像。
Yocto 根据:http ://www.crashcourse.ca/wiki/index.php/Yocto_Project_Quick_Start 制作了图像文件
来自上面链接的示例:
$ ls -F
core-image-minimal-beagleboard-20121120113536.rootfs.jffs2
core-image-minimal-beagleboard-20121120113536.rootfs.tar.bz2
core-image-minimal-beagleboard.jffs2@
core-image-minimal-beagleboard.tar.bz2@
MLO-beagleboard@
MLO-beagleboard-1.5.0+git1+9f94c6577e3a018b6b75cbe39f32bb331871f915-r0*
modules-3.4.11-yocto-standard-r4.3-beagleboard.tgz
README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
u-boot-beagleboard.bin@
u-boot-beagleboard-v2011.06+git6+b1af6f532e0d348b153d5c148369229d24af361a-r3.bin*
u-boot.bin@
uImage@
uImage-3.4.11+git1+a201268353c030d9fafe00f2041976f7437d9386_1+449f7f520350700858f21a555 4b81cc8ad23267d-r4.3-beagleboard-20121120113536.bin
uImage-beagleboard.bin@
x-load-beagleboard-1.5.0+git1+9f94c6577e3a018b6b75cbe39f32bb331871f915-r0.bin.ift*
x-load-beagleboard.bin.ift@
$
Run Code Online (Sandbox Code Playgroud)
我如何使用这些图像来制作可以引导 Yocto 制作的 Linux dist 的 SD 卡?分区等?如何使用我的 Yocto 图像?
为Raspberry Pi 2创建了我自己的 Yocto Linux 发行版(请参阅此处的 Embarcados 教程),添加了meta-browser配方chromium。构建的图像效果很好,我可以运行Chromium,但是......
...当我这样做时,尽管应用程序弹出,但我收到以下错误消息。
raspberrypi2:~$ /usr/bin/chromium/chrome --enable-logging --v=1 --no-sandbox
[1796:1796:0625/011716:ERROR:browser_main_loop.cc(164)] Running without the SUID sandbox! See https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment for more information on developing with the sandbox on.
[1819:1819:0625/011717:ERROR:gl_implementation_osmesa.cc(22)] Failed to load libGL.so.1: libGL.so.1: cannot open shared object file: No such file or directory
[1819:1819:0625/011717:ERROR:gpu_child_thread.cc(145)] Exiting GPU process due to errors during initialization
[1831:1831:0625/011717:ERROR:renderer_main.cc(211)] Running without renderer sandbox
[1837:1837:0625/011717:ERROR:renderer_main.cc(211)] Running without renderer sandbox
Run Code Online (Sandbox Code Playgroud)
当我寻找图书馆时libGL,我得到了这个
root@raspberrypi2:/usr/lib/chromium# find …Run Code Online (Sandbox Code Playgroud) 不同的赋值类型在 bitbake 配方脚本中意味着什么,例如:
BB_NUMBER_THREADS ?= "${@oe.utils.cpu_count()}"
PARALLEL_MAKE ?= "-j ${@oe.utils.cpu_count()}"
MACHINE ??= "qemux86"
Run Code Online (Sandbox Code Playgroud)
上面的什么类似于 Ruby 的bb_number_threads ||= 'something'?
我正在使用 Yocto 为 SystemD 版本 241 的小型嵌入式 Linux 系统生成自定义映像。根文件系统是只读的。我使用绑定安装和overlayfs 使/var/log/journal 目录存在于单独的读/写分区上。我有一个问题,systemd-journald 得到“Amnesia”并且不记得以前的引导日志,即使它们在持久的读/写文件系统上。这意味着即使日志文件在文件系统上存在且有效,日志也无法访问或清除以前启动时的旧日志文件。
# Setup overlayfs binds for various RW files
VOLATILE_BINDS_append = " \
/persistent-storage/var/log /var/log\n\
"
Run Code Online (Sandbox Code Playgroud)
路径 /var/log 存在:
root@me:/var/log# cd /var/log/
root@me:/var/log# ls -lrt
total 9
drwxr-xr-x 2 root root 1024 Jun 3 01:50 nginx
-rw-r--r-- 1 root root 5260 Jun 9 17:56 messages
drwxr-sr-x 5 root systemd-journal 1024 Jun 9 18:00 journal
root@me:/var/log# ls -lrt journal/
total 3
drwxr-sr-x 2 root systemd-journal 1024 Jun 9 …Run Code Online (Sandbox Code Playgroud) yocto ×10
bitbake ×2
boot ×1
chrome ×1
compiling ×1
cryptsetup ×1
device-tree ×1
embedded ×1
encryption ×1
filesystems ×1
gcc ×1
git ×1
journalctl ×1
luks ×1
opengl ×1
permissions ×1
sd-card ×1
sudo ×1
systemctl ×1
systemd ×1
u-boot ×1