binfmt-support - 不允许我回显注册

时间:2013-07-23 15:00:07

标签: linux linux-kernel

我正在使用ubuntu linux。尝试向binfmt添加对ARM解释器的支持。 我收到许可被拒绝错误。

刚刚在我的机器上添加了对binfmt的支持:---

sudo apt-get install binfmt-support
目录binfmt_misc中的

ls: -

ignite@ignite:/proc/sys/fs/binfmt_misc$ ls 
python2.7  python3.2  register  status

binfmt_misc文件系统已正确安装:---

ignite@ignite:/proc/sys/fs/binfmt_misc$ mount
/dev/sda8 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
gvfsd-fuse on /run/user/ignite/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,user=ignite)

模块启动&跑步:---

ignite@ignite:/proc/sys/fs/binfmt_misc$ cat /proc/modules | grep binfmt*
binfmt_misc 17260 1 - Live 0x00000000

状态显示已启用:-----

ignite@ignite:/proc/sys/fs/binfmt_misc$ cat status 
enabled

即使使用sudo,回显到寄存器文件时出错:---

ignite@ignite:/proc/sys/fs/binfmt_misc$ sudo echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/var/local/rpi/qemu/bin/qemu-arm:' > /proc/sys/fs/binfmt_misc/register
bash: /proc/sys/fs/binfmt_misc/register: Permission denied

为什么它不允许我回复注册,即使是sudo?

编辑:---
此命令正常,arm文件夹创建:---

ignite@ignite$ echo "echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/local/bin/qemu-arm:' > /proc/sys/fs/binfmt_misc/register" | sudo sh

ignite@ignite:/proc/sys/fs/binfmt_misc$ ls
arm  python2.7  python3.2  register  status


ignite@ignite:/proc/sys/fs/binfmt_misc$ cat arm 
enabled
interpreter /usr/local/bin/qemu-arm
flags: 
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff

但我无法运行arm可执行文件。这是一个pre compiled program的hello世界。

ignite@ignite:~/testing$ file a.out 
a.out: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.6.3, not stripped
ignite@ignite:~/testing$ ./a.out 
/lib/ld-linux-armhf.so.3: No such file or directory

我是否必须执行chroot才能执行此arm可执行文件?

3 个答案:

答案 0 :(得分:2)

此命令:

sudo echo xyz > /proc/sys/fs/binfmt_misc/register

执行您,而不是超级用户。首先,您的shell open() /proc/sys/fs/binfmt_misc/register,然后fork / exec s“sudo echo xyz”,...

要解决此问题,请执行以下操作:

sudo sh -c 'echo xyz > /proc/sys/fs/binfmt_misc/register'

答案 1 :(得分:1)

回答你问题的第二部分。

运行可执行文件时,系统会显示错误消息:

ignite@ignite:~/testing$ ./a.out
/lib/ld-linux-armhf.so.3: No such file or directory

这解释了出了什么问题。您似乎已经使用/lib/ld-linux-armhf.so.3动态链接的共享库编译了源文件,而不是-L/lib/ld-linux-armhf.so.3。并且在运行时找不到该库。

检查可以在提到的路径ld-linux-armhf.so.3上找到/lib文件,或者尝试使用以下命令解释系统在哪里找到.so文件:

export LD_LIBRARY_PATH=/path/to/your/lib:$LD_LIBRARY_PATH

答案 2 :(得分:0)

取决于文件系统的设置方式和共享库的驻留位置(尤其是chroots或docker容器)

确保已设置F标志(固定二进制文件)。

/proc/sys/fs/binfmt_misc # cat qemu-arm
enabled
interpreter /usr/bin/qemu-arm
flags: OCF
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff