制作 小 linux 教程,用BusyBox制作Linux最小系统

1、下载busybox-1.30.1 地址:https://busybox.net/downloads/busybox-1.30.1.tar.bz2

2、解压:tar xvf busybox-1.30.1.tar.bz2

3、安装交叉编译器

4、安装libncurses5-dev:sudo apt-get install libncurses5-dev

5、配置busybox:make menuconfig

使用默认的配置项就可以,下面是一些重要的配置项说明:

Setting->Build Options->Build BusyBox as a static binary (no shared libs) 是否使用静态编译,如果不是静态编译,则busybox运行时还需要复制几个动态库文件,否则不能运行

settings->build options->Cross compiler prefix设置交叉编译前缀(如果设了环境变量CROSS_COMPILE或make指定了则这里不需要设置)

settings->installation options->Destination path for 'make install'设置安装目录,默认是./_install

Linux System Utilities->mdev支持mdev

6、编译

make CROSS_COMPILE=arm-linux-gnueabihf-

make install

就会安装在_install目录下有如下目录:bin sbin usr,还有一个linuxrc指向bin/busybox

7、进入_install目录创建目录

mkdir dev etc lib var proc tmp home root mnt sys

8、生成etc配置文件(在etc目录下操作):

再复制配置文件:cp -rf ~/busybox-1.30.1/examples/bootfloppy/etc/* .

最终生成的配置文件如下:

etc/inittab(开机免登录):

::sysinit:/etc/init.d/rcS

#::respawn:-/bin/sh

#::respawn:-/bin/login

console::askfirst:-/bin/sh

::ctrlaltdel:/bin/umount -a -r

etc/inittab(开机需要登录):

::sysinit:/etc/init.d/rcS

#::respawn:-/bin/sh

::respawn:-/bin/login #如果这里加上 -f root 则自动登录

#console::askfirst:-/bin/sh

::ctrlaltdel:/bin/umount -a -r

如果需要密码,则:

sudo cp /etc/passwd .

sudo cp /etc/group .

sudo cp /etc/shadow .

再编辑这三个文件,只保留root那一行,这样root的密码与虚拟机(123456)相同,最终passwd,group,shadow三个文件内容依次为:

root:x:0:0:root:/root:/bin/sh #将x去掉就root没有密码了

root:x:0:

root:$6$99hUh1hc$NptxbUGmNiX1zQYM08SAVq.2xbDHqEEy6rKbIHWozgJ2cjoIP39OjmkHgSkr2vR6fXRmy5BXfDQW4lgHH/

ect/profile文件:

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

PS1='\u@\w\$'

etc/fstab文件:

/dev/mmcblk0p2 / ext4 defaults 0 1

proc /proc proc defaults 0 0

devpts /dev/pts devpts defaults 0 0

tmpfs /dev/shm tmpfs defaults 0 0

etc/init.d/rc.S文件(添加自动执行命令,该文件需有执行属性chmod +x rcS):

#! /bin/sh

/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 /var/tmp

/bin/mkdir /var/modules

/bin/mkdir /var/run

/bin/mkdir /var/log

/bin/mkdir -p /dev/pts #telnet服务需要

/bin/mkdir -p /dev/shm #telnet服务需要

/bin/mount -a

echo /sbin/mdev > /proc/sys/kernel/hotplug #USB自动挂载需要

/sbin/mdev -s #启动mdev在/dev下自动创建设备文件节点

/bin/hostname maxonic

#######配置网络################################

#/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

9、创建设备结点

进入dev目录,执行如下命令

sudo mknod console c 5 1

sudo mknod null c 1 3

#sudo mknod ttySAC0 c 204 64

#sudo mknod tty2 c 204 65

#sudo mknod mtdblock0 b 31 0

#sudo mknod mtdblock1 b 31 1

#sudo mknod mtdblock2 b 31 2

10、复制引用的库(如果是静态编译则不需要复制)

如果busybox不是配置为静态编译,则需要复制使用到的动态库,动态库在交叉编译器中有:

arm-linux-gnueabihf-readelf -d bin/busybox #查看引用了哪些动态库,发现有三个(再递归查看引用还有一个),复制四个库到lib目录

sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libm.so.6 .

sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libresolv.so.2 .

sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libc.so.6 .

sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3 .

只需要复制这四个库就可以了,当然也可直接整个lib目录一起复制:

sudo cp -a ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/* .

11、复制到目标盘

进入_install目录,执行如下命令:

sudo cp -rfav * /mnt/disk

进入目标盘然后执行:

sudo chown root:root . -R

12、如果运行时停在:

Run /sbin/init as init process

random: fast init done

则是console参数没有传对,所以串口显示不了,更改内核启动console参数即可

13、登录时会打印出root login on 'UNKNOWN'看着不舒服,找到busybox源码login.c注释掉syslog(LOG_INFO, "root login%s", fromhost)即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用微PE安装KALI LINUX到U盘,【U盘安装kali】U盘 kali pe三合一教程!装机,存储

最近发现U盘可以做出pekali正常u盘的结合教程,并且可以正常当做U盘使用,但是在网上各种教程下我出现了各种问题,整整三天捣鼓,终于实现了这个操作,并且解决了persistence存储问题!现在将来以最详细的图文来…

linux中iconv函数,Linux下编码转换(iconv函数族)

转自:http://www.linuxdiyf.com/viewarticle.php?id45164在Linux上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现(针对文件进行转换)一、利用iconv函数族进行编码转换iconv函数族的头文件是iconv.h使用前需包含之…

linux下mips裸机编译,裸机交叉编译器输入

裸机交叉编译器的输入限制是什么…因为它不编译带有指针或mallocs的程序…或任何需要比底层硬件更多的东西….还有1如何找到这些局限性..我还想问一下…我为目标mips构建了交叉编译器..我需要使用此交叉编译器创建mips可执行文件…但是我无法找到可执行文件的位置…我找到了mip…

linux dns中文域名,Linux 搭建中文域名的DNS服务器

配置之前先来解释一下中文域名是如何工作的:当我们在浏览器上输入 朝阳.北京.中国 这个域名的时候 浏览器会把中文域名翻译成Punycode编码然后再传送给DNS服务器解析,例如 朝阳.北京.中国 翻译成Punycode编码以后就是xn--tpv116h.xn--1lq90i.xn--fiqs8s朝…

linux 脚本自动编制工具,全自动工具链编译脚本

GCC 工具链自动编译脚本本工具用于自动编译指定的工具链,可以同时生成运行于本机系统 (Build system) 和 Windows 系统(可以修改)的两套工具链具体编译规则指定于 .config 中defconfig 目录包含一些预定义的规则,将其复制到脚本根目录并改名为 .config 后…

linux内核全局变量同名,Linux系统下DSO同名全局变量浅析

最近重温了一下《程序员修养》,又搞懂了一些叽里旮旯的问题,现将DSO同名全局变量问题进行简单小结,具体的讲解请看《程序员修养》一书。程序员的自我修养—链接、装载与库.pdf版下载在Linux公社的1号FTP服务器里,下载地址&#xf…

node的ws的api详细讲解

WebSocket是一种在单个TCP连接上进行全双工通信的协议。Node.js中的ws模块提供了WebSocket的实现,使得Node.js可以轻松地创建WebSocket服务器和客户端。 在ws模块中,WebSocket客户端由WebSocket类实现。WebSocket提供了一系列的API,用于管理…

linux切换到字符界面stemctl,CentOS7两种模式

1.13 救援模式忘记root用户密码修改密码: 单用户模式(但只能物理机操作不能远程操作,gaub没加密或者知道gaub才能修改)忘记root用户密码修改密码: 单用户模式(但只能物理机操作不能远程操作,gaub没加密或者知道gaub才能修改)关机 …

c语言编程15,c语言编程15题.doc

——————日历问题——————#includeint xing(int year);int run(int year);int main(){int year;int yue[12]{31,28,31,30,31,30,31,31,30,31,30,31};int xingqi[12];int i,j,k;printf("可以计算公元前的\n请输入年份:");scanf("%d",&year);yea…

东北大学c语言真题及答案,东北大学C语言总测试题(含答案).pdf

C语言总测试题 计算机编程引论(C语言)1.一个C程序的执行是从: 备注及演草:A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的…

c语言的位操作指令,C语言位运算

1. C语言中的位操作符因为C语言的设计目的是取代汇编语言,所以它必须支持汇编语言所具有的运算能力,所以C语言支持全部的位操作符(Bitwise Operators)。位操作是对字节或字中的位(bit)进行测试、置位或移位处理,在对微处理器的编程中&#xf…

c语言long a什么意思啊,英文long的中文是什么意思

英文long的中文是什么意思想要掌握long这个英文单词,我们首先就得先清楚它的中文意思是什么。为此百分网小编为大家带来英文单词long的中文意思。英文long的中文意思形容词 长的; 长时间的; 冗长的,过长的.; 长音的副词 长久地; 始终; 遥远地名词 长时间…

山东科技大学c语言完全题库,“山东科技大学十大未解之谜”之完全解答

“山东科技大学十大未解之谜”之完全解答(2012-04-24 13:53:36)标签:娱乐当我还是一枚小正太刚刚进入山科大的时候,我就看到过这些未解之谜,现在每每看到童鞋们转发这篇经久不衰的文章并且表达自己的疑问,我作为一名资深理科技术宅…

c语言如何一直变换颜色,【图片】(原创)用纯C变了个变色输出字符的程序。。。【c语言吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include#includemain(){char c;int i,j,k,l,m,n,o;int x,y;char c1;int a,b,d,e;x35;y8;textcolor(13);gotoxy(35,10),cprintf("photoshop2014");textcolor(11);gotoxy(20,11);cprintf(" My name is zhou …

android广播注册源码,android 广播源码简要分析-注册

android broadcast1,广播注册静态注册:在系统服务启动时会添加PackageManagerService,在该类的构造方法中就会对各个应用安装目录的apk文件进行扫描解析详细步骤1,PackageManagerService初始化的时候,扫描系统目录下的…

android盒子改造,【当贝市场】废旧手机改造成电视盒子详细教程

3.直接即可输出视频了,然后在手机上安装暴风影音等视频软件的tv版,即可开始观看。有人会说,旧手机电池不行,看一会儿就得没电,怎么办?首先,在你输出到电视时,你就可以给手机锁屏&…

android分辨率px跟dp,Android屏幕适配 px,dp,dpi及density的关系与深入理解

PX(pixel):即传统计算机语言中描述的像素,在Android则代表绝对像素。之所以Android中不推荐使用这种单位,正是因为不同生产厂商,不同品牌,不同屏幕的设备,其分辨率亦不一。举例来说,我们现在将某个Button的…

android onclick方法吗,Android中button的onClick事件几种方法

Android中button的onClick事件几种方法发布时间:2020-09-03 02:36:31来源:脚本之家阅读:100作者:水桶前辈Android中button的onClick事件几种方法利用三种方法,学习button的监听事件。方法一源码如下:packag…

android 播放器 反交错,反交错- 视频横纹处理

以下名词解释摘自维基百科反交错”(deinterlacing)是将交错式(即隔行扫描)(interlace)影像讯号转换为渐进式(逐行扫描)(progressive)影像讯号的一种方法。因为装置处理速度以及带宽的限制下,广播电视系统,例如NTSC或是PAL,都是使用交错式讯号…

android room表关联,如何在首次运行时填充Android Room数据库表?

我尝试了许多方法可以做到这一点,每个没有提供。首先,我尝试使用addMigrations方法向Room中添加Migration实现,但发现它只在数据库升级期间运行,但不在创建时运行。然后,我尝试使用openHelperFactory方法将SQLiteOpenH…