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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql 获取当前时间戳_mysql获取毫秒时间戳

    mysql 获取当前时间戳_mysql获取毫秒时间戳使用函数:Now,current_timestamp,unix_timestampSELECTNOW(),NOW(3),NOW(6),current_timestamp(),current_timestamp(6),unix_timestamp(current_timestamp(3)),REPLACE(unix_timestamp(current_timestamp(3)),’.’,”),unix_timestamp(current_timestamp(3))*1000SELECTNOW(),

    2022年9月28日
  • SCTP简介

    SCTP简介SCTP(StreamControlTransmissionProtocol)是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。SCTP是可以确保数据传输的,和TCP类似,也是通过确认机制来实现的。和TCP不同的是:1.TCP是以字节为单位传输的,SCTP是以数据块为单位传输的TCP接收端确认的是收到的字节数,SCTP接收端确认

    2022年6月15日
  • 从零开始学android编程之Toast提示信息框「建议收藏」

    从零开始学android编程之Toast提示信息框「建议收藏」Toast类可以在程序界面上显示一个简单的提示信息,这个提示信息框用于向用户生成简单的提示信息。1创建包含信息的提示框通过Toast类的静态方法makeText()创建信息提示框,该提示框中包含了指定的信息。该方法的格式为publicstaticToastmakeText(Contextcontext,CharSequencetext,intduration);其

    2022年6月10日
  • 用Pandas 处理大数据的3种超级方法

    用Pandas 处理大数据的3种超级方法原文链接:3simplewaystohandlelargedatawithPandas作者|GeorgeSeif译者|jojoa易上手,文档丰富的Pandas已经成为时下最火的数据处理库。此外,Pandas数据处理能力也一流。其实无论你使用什么库,大量的数据处理起来往往回遇到新的挑战。数据处理时,往往会遇到没有足够内存(RAM)这个硬件问题。企业往往…

    2022年5月24日
  • 前端框架bootstrap和layui有什么区别

    前端框架bootstrap和layui有什么区别做前端的小伙伴肯定都用过或听过Bootstrap和LayUi,小编我虽然不是专业的前端程序员,但是对于前端还是颇有研究,闲暇事情会经常研究各种前端框架的源码,一来可以借鉴优秀框架的思想,二来可以顺便学习可以提高自己,好了,不废话了。web前端全栈资料粉丝福利(面试题、视频、资料笔记、进阶路线)先看百度Bootstrap的定义Bootstrap是美国Twitter公司的设计师MarkOtto和JacobThornton合作基于HTML、CSS、JavaScript开发的简洁、直观、强悍的前端

    2022年6月25日
  • hashmap遍历keyset_怎么遍历一个map

    hashmap遍历keyset_怎么遍历一个map四种方式遍历hashmap,面试官都馋哭了

    2022年9月8日

发表回复

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

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