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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Android SDK下载和安装,以及部署「建议收藏」

    Android SDK下载和安装,以及部署「建议收藏」第一步:先到网站地址下载资源下载地址:https://www.androiddevtools.cn/第二步:选择具体版本资源下载第三步:点击启动安装SDKManager.exe选择相应的工具包进行下载对于扩展选项:这里建议全选分别选中每个License,分别设置为AcceptLicense[这样更方便快捷!!]确认好都勾选后,点击Install下载注意:下载可能比较慢,耗费时间长,最重要的是保证网络好,没下载成功,就重进重选重新下载…

  • Java volatile源码分析

    Java volatile源码分析synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile可以说是JVM提供的最轻量级的同步机制。jMM告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。线程在工作内存进行操作后什么时候写回到主内存中,实际上没有明确的限制。而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile变量的修改会立刻被其他线程所感知,即不会出现数据脏读,从而保证数据的一个可见性。https://blog.

  • INFO: API ‘variant.getJavaCompile()’ is obsolete and has been replaced with ‘variant.getJavaCompileP

    INFO: API ‘variant.getJavaCompile()’ is obsolete and has been replaced with ‘variant.getJavaCompileP

  • VBA字典(详解,示例)「建议收藏」

    字典主要作用:条件计数、条件求和、去重、匹配。本篇主要介绍了VBA字典以上使用方法及注意事项。

  • C# WinForm 设置DataGridView选中指定行

    C# WinForm 设置DataGridView选中指定行introwIndex=3;//指定行号this.dgvInGoodsInfo.Rows[rowIndex].Selected=true;this.dgvInGoodsInfo.CurrentCell=this.dgvInGoodsInfo.Rows[rowIndex].Cells[2];也有其他网友代码Cells[0];如下:我试了,填0和1调试报…

  • c语言实现图书管理系统创新_c语言图书管理系统源代码

    c语言实现图书管理系统创新_c语言图书管理系统源代码/* 课程设计项目名称:图书查询系统 作者:施瑞文 时间:2018.3.4*/#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;windows.h&gt;#include&lt;conio.h&gt;#include&lt;stdlib.h&gt;#defineNsizeof(structBOOK)…

    2022年10月11日

发表回复

您的电子邮箱地址不会被公开。

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