rootfs.bin_libhdfs

rootfs.bin_libhdfs忘了到底前几年看的一篇什么busybox的教程,写的及其复杂,以至于让我这么久以来一直不敢再去碰这个东西,直到今天又再次有了这个需求,特来再搞一次,没想到不到俩小时,一次搞定,特将这过程记录下来,以后也好有个参考。1环境宿主机:Ubuntu18.04交叉编译工具链:aarch64-linux-gnu-gcc7.4.0目标机:Armv8i.MX8EVKboard2下载…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

忘了到底前几年看的一篇什么busybox的教程,写的极其复杂,以至于让我这么久以来一直不敢再去碰这个东西,直到今天又再次有了这个需求,特来再搞一次,没想到不到俩小时,一次搞定,将这过程记录下来,以后也好有个参考。

1 环境

宿主机: Ubuntu 18.04
交叉编译工具链: aarch64-linux-gnu-gcc 7.4.0
目标机: Armv8 i.MX 8 EVK board

2 下载

busybox官网下载:https://busybox.net/,我是直接git clone的最新的1_31_stable分支
git clone https://git.busybox.net/busybox -b 1_31_stable
在这里插入图片描述

3 编译

3.1 make defconfig

3.2 make menuconfig

这里我们的原则是在make defconfig的基础上尽可能少的改动这些config, 要改以下几个地方,括号里的是symbol,方便直接查找:

-> Settings
 --- Support --long-options
  [\*] Don't use /usr	#不要生成usr目录	(CONFIG_INSTALL_NO_USR)
 --- Build Options
  [\*] Build static binary (no shared libs)  #进行静态编译 (CONFIG_STATIC)
 --- Installation Options ("make install" behavior)
  What kind of applet links to install (<choice> [=y])
   (X) as soft-links	(CONFIG_INSTALL_APPLET_SYMLINKS)
 --- Library Tuning
  [\*]   Query cursor position from terminal	(CONFIG_FEATURE_EDITING_ASK_TERMINAL)

结束,保存一下

3.3 make all

make ARCH=aarch64 CROSS_COMPILE=aarch64-linux-gnu- all

No Error, 必须的

3.4 安装到指定目录

mkdir -p ./installed     //创建指定目录
make CONFIG_PREFIX=./installed  install    //安装到指定目录

在当前目录下会生成一个installed文件夹,到此我们的编译算是完成了。

4 建立ROOTFS目录结构

(起始路径为busybox的编译根目录,此处文件夹名为busybox)
# mkdir ../rootfs //创建一个rootfs目录
# cd ../rootfs //切换到rootfs目录下
# mkdir dev etc lib usr var proc tmp home root mnt sys
# cd ../busybox/ //切换到busybox目录下
# cp -ra installed/* ../rootfs
# cp -ra examples/bootfloppy/etc/* ../rootfs/etc //把fstab,init.d,inittab,profile拷贝过来,需修改
# cd ../rootfs/etc //切换到rootfs的etc目录下
# cp /etc/passwd . //拷贝宿主机的passwd文件到rootfs的etc目录中,需修改
# cp /etc/group . //拷贝宿主机的group文件到rootfs的etc目录中,需修改
# cp /etc/shadow . //拷贝宿主机的shadow文件到rootfs的etc目录中,需修改

5 修改上面的几个文件

此操作的根文件夹为rootfs文件夹内,目录名为rootfs

5.1 修改inittab

原始文件为:
		::sysinit:/etc/init.d/rcS
		::respawn:-/bin/sh
		tty2::askfirst:-/bin/sh
		::ctrlaltdel:/bin/umount -a -r

修改后为:
	---(1):开机免登陆直接进shell
	
		::sysinit:/etc/init.d/rcS
		console::askfirst:-/bin/sh
		::ctrlaltdel:/bin/umount -a -r

	---(2):开机需要登陆
	
		::sysinit:/etc/init.d/rcS
		::respawn:-/bin/login

5.2 修改profile

		PATH=/bin:/sbin:/usr/bin:/usr/sbin
		export LD_LIBRARY_PATH=/lib:/usr/lib
		/bin/hostname osee
		USER="`id -un`"
		LOGNAME=$USER
		HOSTNAME='/bin/hostname'
		PS1='[\u@\h \W]# '

5.3 修改 etc/init.d/rcS

/bin/mount -n -t ramfs ramfs /var
/bin/mount -n -t ramfs ramfs /tmp
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t ramfs none /dev
/bin/mkdir -p  /var/tmp
/bin/mkdir -p  /var/modules
/bin/mkdir -p  /var/run
/bin/mkdir -p  /var/log
/bin/mkdir -p /dev/pts						//telnet服务需要
/bin/mkdir -p /dev/shm						//telnet服务需要
#echo /sbin/mdev > /proc/sys/kernel/hotplug//USB自动挂载需要
/sbin/mdev -s         						//启动mdev在/dev下自动创建设备文件节点
/bin/mount -a

#######配置网络################################
/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0
/sbin/ifconfig eth0 192.168.1.70
/sbin/ifconfig eth0 netmask 255.255.255.0
/sbin/route add default gw 192.168.1.1 eth0
/sbin/ifconfig eth1 192.168.1.71 netmask 255.255.255.0
/sbin/route add default gw 192.168.1.1 eth1

5.4 修改etc/fstab

none   /dev/pts    devpts   mode=0622      0 0
tmpfs  /dev/shm    tmpfs    defaults       0 0

5.6 修改passwd/group/shadow文件,只保留第一行

6 拷贝宿主机的libc到rootfs

# cp -ra /usr/aarch64-linux-gnu/lib/* rootfs/lib/

7 拷贝编译安装内核模块到目标机

make modules
make modules_install INSTALL_MOD_PATH=/rootfs/lib/modules

8 打包

$ cd rootfs
$ find . | cpio -H newc -ov --owner root:root > ../initramfs.cpio
$ cd ..
$ gzip initramfs.cpio

9 解压cpio

$ cpio -idmv < initramfs.cpio

大功告成,快把卡插到目标机开发板上试下吧。

提供一个打包好的riscv64 linux可用的rootfs: https://download.csdn.net/download/wangyijieonline/85235425
提供一个打包好的arm64 linux可用的rootfs:[TBD]

参考文献:

1, 使用BusyBox制作嵌入式Linux根文件系统:https://www.cnblogs.com/Charles-Zhang-Blog/p/3419301.html
2, [Busybox]Busybox制作文件系统:https://www.cnblogs.com/aaronLinux/p/6886424.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184950.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle触发器报错语法,oracle触发器

    oracle触发器报错语法,oracle触发器oracle触发器系统默认用户浏览4438oracle触发器怎么写?通过编写数据库触发器,在HR数据库上实现下面的业务规则:1.如果某工种的最低工资进行上涨,则相应的员工的工资应自动增长…通过编写数据库触发器,在HR数据库上实现下面的业务规则:1.如果某工种的最低工资进行上涨,则相应的员工的工资应自动增长推荐于2019-06-0421:52:46创建触发器,给触发器命名,在哪个表上的增删改…

    2022年7月11日
    15
  • 浅谈VB.NET[通俗易懂]

    浅谈VB.NET[通俗易懂]浅谈VB.NET

    2022年4月24日
    38
  • Android preference_android:orientation=”vertical”

    Android preference_android:orientation=”vertical”【正文】一、PreferenceFragment的引入:PreferenceActivity是一个非常有用的基类,当我们开发Android项目时避免不了选项设置,这些设置习惯用Preference来保存。Android专门为这种Activity提供了便捷的基类PreferenceActivity。如果继承自Preference则不需要自己控制Preference的读写,Preference

    2022年9月7日
    0
  • 转一篇难得的好文章-CPU流水线的探秘之旅

    转一篇难得的好文章-CPU流水线的探秘之旅作为程序员,CPU在我们的工作中扮演了核心角色,因此了解处理器内部的工作方式对程序员来说不无裨益。  CPU是如何工作的呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有12级流水线还是18级流水线,甚至是更深的31级流水线时,这到些都意味着什么呢?  应用程序通常会将CPU看作是黑盒子。程序中的指令按照顺序依次进入CPU,执行完之后再按顺序依次从C

    2022年8月20日
    13
  • validateRequest=false 可以禁用请求验证[通俗易懂]

    validateRequest=false 可以禁用请求验证[通俗易懂]参看了MVP的利用WebClient和WebRequest类获得网页源代码于是想自己动手写点,当然是参考其的办法啦。我这次下载了visualwebdeveloper2005express按照上面的文章编写了代码,我的btn函数如下       stringurlPage=””;       urlPage=UrlText.Text;

    2022年6月10日
    26
  • shift键粘滞了怎么办_5shift后门清免疫

    shift键粘滞了怎么办_5shift后门清免疫1.简介沾滞键的目的是为了帮助那些按键有困难的人设计的

    2022年9月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号