rootfs 是一个 squashfs 映像,我的引导加载程序正在将它加载到 SDRAM 中的某个地址。我需要将哪些参数传递给内核,以便它可以从那里挂载 rootfs?Squashfs 支持是内置的,并且已经可以与
root=/dev/mtdblock2 rootfstype=squashfs
Run Code Online (Sandbox Code Playgroud)
用于从闪存启动。
编辑:这是一个基于 MIPS 的嵌入式设备,使用自定义引导加载程序。通常情况下,bootloader 将压缩后的内核从 flash 中提取到 SDRAM 中,然后内核将 /dev/mtdblock2 作为 rootfs 挂载。我正在尝试改进引导加载程序,以便它可以将映像下载到其 RAM 并在不写入闪存的情况下启动。
我不知道如何让 Linux 在 RAM 中挂载一个文件系统映像作为 rootfs。
我想弄清楚为什么以下设备未在我的Creator CI20上设置为其驱动程序。作为参考,我使用的是 Linux 内核 v4.13.0 并在本地进行编译:
make ARCH=mips ci20_defconfig
make -j8 ARCH=mips CROSS_COMPILE=mipsel-linux-gnu- uImage
Run Code Online (Sandbox Code Playgroud)
从正在运行的系统中,我可以看到:
ci20@ci20:~# find /sys | grep rng
/sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8
/sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8/compatible
/sys/firmware/devicetree/base/jz4780-cgu@10000000/rng@d8/name
/sys/bus/platform/drivers/jz4780-rng
/sys/bus/platform/drivers/jz4780-rng/bind
/sys/bus/platform/drivers/jz4780-rng/unbind
/sys/bus/platform/drivers/jz4780-rng/uevent
Run Code Online (Sandbox Code Playgroud)
所以设备在运行时被内核看到,现在缺少的部分是为什么驱动程序从未绑定?我会期待这样的事情:
/sys/bus/platform/drivers/jz4780-rng/100000d8.rng
Run Code Online (Sandbox Code Playgroud)
我确实找到了其他一些解释如何调试正在运行的系统的帖子,例如:
虽然这些帖子上的信息是准确的,但对我来说并不是很有帮助。由于我在本地构建我的内核(我printk
在jz4780-rng
驱动程序的探测功能中添加了),我的问题是:
jz4780-rng
驱动程序调用探测函数的准确信息?driver_probe_device
?我printk
可以在代码中的任何地方添加来调试它。问题是:哪个函数正在遍历设备树并调用probe/init 函数?
以供参考:
$ dtc -I fs -O dts /sys/firmware/devicetree/base | grep -A 1 rng
rng@d8 {
compatible = "ingenic,jz4780-rng";
};
Run Code Online (Sandbox Code Playgroud)
兼容字符串声明为:
cgu: jz4780-cgu@10000000 {
compatible = …
Run Code Online (Sandbox Code Playgroud) 我很无聊,想玩上网本或其他小型电脑。任何人都可以推荐一些东西吗?
要求:
想了解游戏开发?您是 Linux 爱好者,希望测试“Linux 可运行于一切”的说法吗?也许您是一名软件开发人员,希望针对多种架构进行发布,并且您手头没有另一台 MIPS Little Endian 机器来测试您的程序。无论您的情况如何,在 Playstation 2 上安装 Linux 的理由之多令人惊讶,即使在它发布 16 年后(男孩,我突然觉得自己老了。),但同样令人惊讶的是缺乏有关它的文档或如何安装它。
不要误会我的意思,如果您想在带有网络适配器和 IDE 硬盘的胖 PS2 上使用原始的 Sony Linux Kit,或者其中一个更新的开源版本,您可以找到大量信息。然而,这需要购买一些东西,而且可能相当昂贵,尤其是在索尼 Linux 套件本身方面。本指南将介绍有关 PS2 原生硬件的一些基础知识,以及它的硬件兼容性,然后我们将继续介绍如何在更多种类的 PS2 上安装 Linux。
PS2用的是什么CPU?
PS2 使用单核“情感引擎”CPU,原始胖型号的频率为 295MHz,较新的超薄型号的频率为 299MHz。情感引擎是一个 64 位 MIPS Little Endian CPU,支持 128 位地址。
PS2有多少内存?
它有 32MB RDRAM 和 4MB eDRAM。
它有什么样的GPU?
PS2 使用主频为 147.4MHz 的“图形合成器”GPU,能够以 32 位颜色以 60Hz 输出高达 1920x1080 的图形。
它支持什么外部存储?
未经修改的 PS2 支持音频-CD、视频-DVD 和最多两张最大 128MB 的存储卡,用于保存游戏。使用软件漏洞修改的 PS2 还支持两张最大 128MB 的存储卡,用于一般文件管理和存储,以及通过 uLaunchELF 等第三方文件管理器浏览数据 CD/DVD 上的文件,以及一些 USB 1.1 磁盘,通过软件支持在较新的超薄型号上提供对 USB …
当我运行我的 C 程序时,我需要在我的机器上生成MIPS特定的代码。当我简单地奔跑时,
gcc -O2 -S -c hello.c
Run Code Online (Sandbox Code Playgroud)
在我的系统上,我得到了hello.s
它似乎生成了一些汇编代码,但它似乎不是MIPS特定的代码。hello.s
文件内容如下。
.file "hello.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "Hello world"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB11:
.cfi_startproc
movl $.LC0, %edi
xorl %eax, %eax
jmp printf
.cfi_endproc
.LFE11:
.size main, .-main
.ident "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-4)"
.section .note.GNU-stack,"",@progbits
Run Code Online (Sandbox Code Playgroud)
如何在我的机器上生成MIPS特定代码?
我的机器详细信息如下。
arch
x86_64
Run Code Online (Sandbox Code Playgroud) 我正在尝试在大端系统上测试一些软件以确保兼容性。我的计划是在 Ubuntu 12.04 上使用 qemu 来模拟 MIPS 系统。到目前为止,我已经能够成功创建任务系统,但我还无法将其与主机系统联网。我可以从访客系统访问外部世界(例如 wget 或 apt-get),但我尝试设置 samba 失败了。
据此,在 QEmu 1.1 及更高版本中,网桥助手可以为您设置 tun/tap,而不需要额外的脚本。我正在尝试使用它,因为我见过不同版本的脚本。现将qemu-system-mips -version
情况通报如下:
QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2.1), Copyright (c) 2003-2008 Fabrice Bellard
Run Code Online (Sandbox Code Playgroud)
我从 1.4.1 源代码编译并使用apt-get
. 两者都报道了同样的事情。我假设我有 1.1 或更高版本,尽管有什么-version
告诉我的。无论如何,下一个指令是打开默认网络助手的 setuid 属性:
sudo chmod u+s /usr/local/libexec/qemu-bridge-helper
Run Code Online (Sandbox Code Playgroud)
接下来,我bridge.conf
在/etc/qemu/
和 中创建了一个文件/usr/local/etc/qemu
以-rw-r--r--
获取权限。该文件的内容是:
allow br0
Run Code Online (Sandbox Code Playgroud)
如果我使用以下命令启动 QEmu:
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -net nic -net bridge,br=br0 -smb …
Run Code Online (Sandbox Code Playgroud) 由于 MIPS 端口kexec
不支持该--initrd
参数,我正在寻找模仿该功能的变通方法。据Linux的/ MIPS维基,MIPS内核的支持rd_start
和rd_size
内核的命令行参数用于指定的initrd的位置。我想知道是否可以将 initrd 加载到内存中并将其传递给内核参数?
如果可能,我应该在内存中的哪个位置加载文件以及如何加载它?我想将内核和 initrd 连接到一个文件中,但是如何获取kexec
加载新内核的地址?
一点背景知识:我有一个WNDR3700 wifi 路由器,它运行带有 kexec 内核的OpenWrt。我的目标是引导到存储在 USB 上的普通 OpenWrt 内核以简化升级。问题(目前)是 usb 模块没有构建到内核中,而是作为可加载的内核模块提供。我可以使用嵌入式 initramfs 从 USB 引导到另一个内核,但是使用 initramfs 需要我编译内核,不是吗?那么,或者,我是否可以将 initramfs/initrd 嵌入到现有的内核二进制文件/elf(没有任何 ramdisk)中并避免重新编译内核?
此外,显然将 usb 模块编译到内核中需要重新编译内核,所以这不是一个选项。
我买了一个中国的P2P摄像头,没有MJPEG流,所以想编译mjpg-streamer
一下。这是我的 CPU 信息:
# cat /proc/cpuinfo
system type : Ralink SoC
processor : 0
cpu model : MIPS 24K V4.12
BogoMIPS : 239.61
wait instruction : yes
microsecond timers : yes
tlb_entries : 32
extra interrupt vector : yes
hardware watchpoint : yes
ASEs implemented : mips16 dsp
VCED exceptions : not available
VCEI exceptions : not available
# uname -a
Linux (none) 2.6.21 #878 Tue Oct 29 09:53:25 CST 2013 mips unknown
Run Code Online (Sandbox Code Playgroud)
我想更改路由器上的一些文件。首先,我可以更改/var 中的所有内容,但我想更改/etc/fstab。当我尝试更改它时,我收到一条错误消息,指出文件系统是只读的。
路由器内的 Busybox,命令有限,所以我已经得到了用于 mips http://www.busybox.net/downloads/binaries/1.19.0/busybox-mips 的busybox 二进制文件,并通过 tftp ( tftp -g -r busybox-mips my.i.p.addr
)上传它,所以现在我可以使用完整的命令 ( /var/tmp/busybox-mips
command)。
路由器(sdram)内部没有rom,或者没有其他分区。它必须与busybox有关。
# /var/tmp/busybox-mips df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 1344 1344 0 100% /
# mount
rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro)
proc on /proc type proc (rw,nodiratime)
ramfs on /var type ramfs (rw)
#
Model:
Airties 5021
Processor:
BCM6332KFBG
HS1037 P12
994981 N1
Memory:
M12L64164A-7T (SDRAM)
ANM1P02HL 1028
Run Code Online (Sandbox Code Playgroud) 我有一台带有名为 atomTV 的程序的旧 PC,用于查看和从分子轨迹文件制作电影。我只有一个二进制文件,它运行的平台是 64 位 MIPS 架构,我运行的是 IRIX。我和创作者谈过,他说他失去了来源。我的 IRIX 电脑最近死机了,但我仍然想使用这个程序。可以做什么?
这些文件是 xyz、dcd、pdb 和那种类型的东西。最好,我想知道在现代 Unix/Linux 环境中运行程序的某种方式。如果重要的话,我可以访问操作系统中的所有旧文件。
当我尝试在 Linux 中运行该程序时,我遇到了错误的 ELF 类型错误。
这几乎不是一个理论问题,因为许多人已经这样做了,尽管关于底层过程的信息很少。
我正在开发一个基于 MIPS 的自定义处理器,我想在其上运行 Ubuntu。在您设计了指令集和计算机体系结构本身之后,我对接下来要做什么感到非常困惑。我需要能够运行内核和操作系统,但它们是如何联系在一起的?
目前我正在研究为 Linux 内核设计一个编译器来生成合适的汇编语言。这是一个好方法吗?之后我需要做什么?