在Centos中编译的nWipe包在Busybox嵌入式linux中不工作
nWipe Package compiled in Centos not working in Busybox embedded linux
我已经在Centos中编译了nwipe开源实用程序。一旦编译,它在编译它的机器上工作得非常好。我还将编译后的包复制到另一台运行Centos的机器以及所需的库,它工作得很好。
我已经尝试将这个实用程序与Busybox RAMBOX嵌入式linux一起工作。此实用程序的目的是通过TFTP PXEBoot工作站并自动擦除所有硬盘驱动器。
为了实现这一点,我使用了Centos netboot CD中的Linux内核,并下载了busybox,复制了我在另一个Centos开发服务器上编译的nwipe实用程序。
我还复制了所有必需的库。见下文.
当我做ldd nwipe时。它显示了库的依赖关系。
[root@localhost src]# ldd nwipe
linux-gate.so.1 => (0x00a78000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00650000)
libparted.so.2 => /usr/lib/libparted.so.2 (0x007fd000)
libpanel.so.5 => /usr/lib/libpanel.so.5 (0x00dd0000)
libncurses.so.5 => /lib/libncurses.so.5 (0x006db000)
libc.so.6 => /lib/libc.so.6 (0x004b0000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0x007e2000)
/lib/ld-linux.so.2 (0x0048a000)
libuuid.so.1 => /lib/libuuid.so.1 (0x0025b000)
libdl.so.2 => /lib/libdl.so.2 (0x00649000)
libdevmapper.so.1.02 => /lib/libdevmapper.so.1.02 (0x0073c000)
libselinux.so.1 => /lib/libselinux.so.1 (0x006ba000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00a2e000)
libudev.so.0 => /lib/libudev.so.0 (0x0066d000)
所以我复制了所有这些库的依赖到busybox/lib/usr/lib文件夹。
最后,我编译了busybox,并使用cpio和gzip来获得initrd。img文件。
然后我使用centos netboot内核2.6和initrd。我要预启动工作站。一切都很好,我可以使用所有的busybox基本linux命令。但是当我执行。/nwipe时,它不起作用。它只是再次显示shell提示符。
/# ./nwipe
/#
见下面我的init文件的内容。
#!/bin/sh
#Mount things needed by this script
mount -t proc proc /proc
mount -t sysfs sysfs /sys
#Disable kernel messages from popping onto the screen
echo 0 > /proc/sys/kernel/printk
#Clear the screen
clear
#Create all the symlinks to /bin/busybox
busybox --install -s
#Create device nodes
mknod /dev/null c 1 3
mknod /dev/tty c 5 0
mdev -s
#Function for parsing command line options with "=" in them
# get_opt("init=/sbin/init") will return "/sbin/init"
get_opt() {
echo "$@" | cut -d "=" -f 2
}
#Defaults
init="/sbin/init"
root="/dev/hda1"
#Process command line options
for i in $(cat /proc/cmdline); do
case $i in
root=*)
root=$(get_opt $i)
;;
init=*)
init=$(get_opt $i)
;;
esac
done
#Mount the root device
mount "${root}" /newroot
#Check if $init exists and is executable
if [[ -x "/newroot/${init}" ]] ; then
#Unmount all other mounts so that the ram used by
#the initramfs can be cleared after switch_root
umount /sys /proc
#Switch to the new root and execute init
exec switch_root /newroot "${init}"
fi
#This will only be run if the exec above failed
echo "Failed to switch_root, dropping to a shell"
exec sh
有人能帮我解决这个问题吗?
如何用busybox运行我编译的软件?
提前感谢您阅读这篇文章。
我已经设法通过不使用busybox来解决这个问题。这一次,我使用了Centos最小安装,并使用了dracut实用程序来创建内核和initramfs,并将根文件系统作为NFS挂载到服务器上。这招很管用。
它的工作方式就像一个完整的Linux Centos,它是相当快的。
感谢你看这篇文章:)
相关文章:
- QtWebEngine 到嵌入式 Linux 交叉编译失败
- 如何在QT Creator开源版本中为嵌入式Linux交叉编译qt
- 'libstdc++'库的链接在嵌入式 Linux 中被破坏
- 开发C++应用程序以在嵌入式 Linux 安装程序上运行
- Jetson TK1 - 嵌入式Linux - 如何定期中断
- 嵌入式 Linux 应用程序中的周期"lags"
- 嵌入式 linux/android 内核开发工作流程
- 使用eventfilter(嵌入式linux)区分两个键盘按键
- 在嵌入式Linux上使用C++Std Lib时出现异常的segfault
- 用于嵌入式Linux应用程序的交叉编译Qt
- 为什么i2c_smbus功能不可用?(I2C -嵌入式Linux)
- ARM嵌入式Linux (AM335x),文本文件内容下电后删除
- 嵌入式Linux设备上运行的C/ c++应用程序内存泄漏调试
- 在c++代码中添加人为延迟时会产生奇怪的结果.嵌入式Linux
- 在Centos中编译的nWipe包在Busybox嵌入式linux中不工作
- 在嵌入式Linux平台上是否可以使用Posix线程
- USB鼠标检测.Qt在嵌入式Linux上
- 嵌入式linux上的Getrusage函数
- Qt嵌入式linux事件观察程序
- 将boost::asio的部分封装在C库中,用于嵌入式Linux