我正在尝试运行一个 Linux 应用程序,而我想要运行的只是这个关闭启动的应用程序。我需要网络,仅此而已(没有显示器、外围设备等)。我不想运行其他应用程序,以便我运行的应用程序具有 100% 的 CPU。这可能吗?
Cir*_*郝海东 18
最小的 initrd CPIO hello world 程序一步一步
编译一个没有任何依赖关系的 hello world 以无限循环结束。init.S
:
.global _start
_start:
mov $1, %rax
mov $1, %rdi
mov $message, %rsi
mov $message_len, %rdx
syscall
jmp .
message: .ascii "FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR\n"
.equ message_len, . - message
Run Code Online (Sandbox Code Playgroud)
我们不能使用sys_exit
,否则内核会崩溃。
然后:
mkdir d
as --64 -o init.o init.S
ld -o init d/init.o
cd d
find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz
ROOTFS_PATH="$(pwd)/../rootfs.cpio.gz"
Run Code Online (Sandbox Code Playgroud)
这将创建一个文件系统/init
,其中包含我们的 hello world at ,这是内核将运行的第一个用户态程序。我们还可以向其中添加更多文件,d/
并且/init
在内核运行时可以从程序访问它们。
然后cd
进入Linux内核树,照常build,在QEMU中运行:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout v4.9
make mrproper
make defconfig
make -j"$(nproc)"
qemu-system-x86_64 -kernel arch/x86/boot/bzImage -initrd "$ROOTFS_PATH"
Run Code Online (Sandbox Code Playgroud)
你应该看到一行:
FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR
Run Code Online (Sandbox Code Playgroud)
在模拟器屏幕上!请注意,它不是最后一行,因此您必须往上看。
如果静态链接它们,也可以使用 C 程序:
#include <stdio.h>
#include <unistd.h>
int main() {
printf("FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR FOOBAR\n");
sleep(0xFFFFFFFF);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和:
gcc -static init.c -o init
Run Code Online (Sandbox Code Playgroud)
您可以在带有 USB 的真实硬件上运行,/dev/sdX
并且:
make isoimage FDINITRD="$ROOTFS_PATH"
sudo dd if=arch/x86/boot/image.iso of=/dev/sdX
Run Code Online (Sandbox Code Playgroud)
关于此主题的重要来源:http : //landley.net/writing/rootfs-howto.html它还解释了如何使用gen_initramfs_list.sh
,这是来自 Linux 内核源代码树的脚本,可帮助自动化该过程。
下一步:设置 BusyBox,以便您可以与系统交互:https : //unix.stackexchange.com/questions/2692/what-is-the-smallest-possible-linux-implementation/203902#203902
在 Ubuntu 16.10、QEMU 2.6.1 上测试。
有一些系统应用程序是必须运行的,当然,除了它们之外,您可以将其余的计算机资源专用于该应用程序。为了获得最低限度,您可以看看非常小的 Linux 发行版,例如 TinyCore Linux 等。
它还取决于应用程序本身,除了网络之外它还需要哪些服务等。
我认为如果您能提供更具体的信息,您会得到更详细的答复。
比如什么样的app之类的。
归档时间: |
|
查看次数: |
9509 次 |
最近记录: |