我为NiosII编译了Linux。我在RAM中有一个文件系统。我使用busybox,buildroot来制作文件系统。然后使用先前创建的文件系统编译内核。
一旦Linux启动,如果我运行像ls这样的命令(因为我想列出当前文件夹中的目录),它会导致SEGV(分段错误)
dtlinux login: root
Password:
login[547]: root login on 'ttyJ0'
BusyBox v1.23.1 (2015-03-17 16:38:07 CDT) hush - the humble shell
Enter 'help' for a list of built-in commands.
~ # ls
SEGV
~ #
我在系统中没有开发其他程序。我只是想用静音
来尝试busybox 1.23.1如果我提供帮助,就会发生这种情况:
~ # help
Built-in commands:
------------------
. Run commands in a file
bg Resume a job in the background
break Exit from a loop
...
... (I shortened this it was to long to post)
...
wait Wait for process
~ #
这让我觉得busybox编译正确。
有没有人遇到过类似的问题?
答案 0 :(得分:1)
是的,ls
计划可能会在undefined behavior上崩溃,但segmentation violation。检查ls
是否不是内置版(可能使用which ls
或使用echo $PATH
)
也许您的libc
(或来自ls
的{{1}}命令)可能是错误构建的(或某些动态链接问题)。
尝试(交叉)编译一些静态链接的程序(甚至可能是某些 hello world )然后尝试将该程序复制到目标系统然后运行它。如果它运行,则意味着内核能够为某些系统调用提供服务,并可能提示错误的coreutils
或动态链接问题。
(我希望您在桌面上运行Linux,因为您需要熟悉Linux来调试您的问题)