busybox的基本使用记录壹

内核如何启动init进程
init/main.c

static int __ref kernel_init(void *unused)
{int ret;kernel_init_freeable();/* need to finish all async __init code before freeing the memory */async_synchronize_full();ftrace_free_init_mem();jump_label_invalidate_initmem();free_initmem();mark_readonly();/** Kernel mappings are now finalized - update the userspace page-table* to finalize PTI.*/pti_finalize();system_state = SYSTEM_RUNNING;numa_default_policy();rcu_end_inkernel_boot();if (ramdisk_execute_command) {ret = run_init_process(ramdisk_execute_command);if (!ret)return 0;pr_err("Failed to execute %s (error %d)\n",ramdisk_execute_command, ret);}/** We try each of these until one succeeds.** The Bourne shell can be used instead of init if we are* trying to recover a really broken machine.*/if (execute_command) {ret = run_init_process(execute_command);if (!ret)return 0;panic("Requested init %s failed (error %d).",execute_command, ret);}if (!try_to_run_init_process("/sbin/init") ||!try_to_run_init_process("/etc/init") ||!try_to_run_init_process("/bin/init") ||!try_to_run_init_process("/bin/sh"))return 0;panic("No working init found.  Try passing init= option to kernel. ""See Linux Documentation/admin-guide/init.rst for guidance.");
}
static const char *argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };static int run_init_process(const char *init_filename)
{argv_init[0] = init_filename;pr_info("Run %s as init process\n", init_filename);return do_execve(getname_kernel(init_filename),(const char __user *const __user *)argv_init,(const char __user *const __user *)envp_init);
}
依次尝试执行/sbin/init  /etc/init /bin/init  /bin/sh 
ls -l /sbin/init
lrwxrwxrwx    1 test     test            14 Aug  3  2022 /sbin/init -> ../bin/busybox
简介: linux内核启动的第一个init进程,并且集成了大量的linux命令和工具的软件和系统初始化运行的配置,比如ls,mv,ifconfig等命令,是一个大的工具箱,
使用就是配置相关的选项,选择自己想要的功能,然后编译即可.
(1)官网和源码包下载https://busybox.net/
(2)解压mkdir rootfstar -vxjf busybox-1.29.0.tar.bz2 
(3)配置busybox,裁剪和选择需要的功能cp  ../config_xxx   ./.configmake ARCH=arm64  CROSS_COMPILE=aarch64-linux-gnu- menuconfig
(4)编译busybox make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j 20  
(5)install 生成所需要的busyboxmake install make CONFIG_PREFIX=../busybox_output/  install cp -af ./_install/*   ../busybox_output/
(6)查看成品
ls -lh
total 12K
drwxr-xr-x 2 root root 4.0K Jun 21 14:50 bin
lrwxrwxrwx 1 root root   11 Jun 21 14:50 linuxrc -> bin/busybox
drwxr-xr-x 2 root root 4.0K Jun 21 14:50 sbin
drwxr-xr-x 4 root root 4.0K Jun 21 14:50 usr

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

生产级别的 vue

生产级别的 vue 拆分组件的标识更好的组织你的目录如何解决 props-base 设计的问题transparent component (透明组件)可减缓上述问题provide 和 inject vue-meta 在路由中的使用如何确保用户导航到某个路由自己都重新渲染?测试最佳实践如何制…

JMeter的基本概念

一、主流测试工具 1,Loadrunner HP Loadrunner是一种工业级标准性能测试负载工具,可以模拟上万用户实施测试,并在测试时可实时检测应用服务器及服务器硬件各种数据,来确认和查找存在的瓶颈 支持多协议:Web(HTTP/HTML)、Windows…

Java项目:基于SSM框架实现的绿色农产品推广应用网站果蔬商城水果商城蔬菜商城【ssm+B/S架构+源码+数据库+答辩PPT+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的绿色农产品推广应用网站果蔬商城水果商城蔬菜商城 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能…

通信系统概述

1.定义 通信系统(也称为通信网络)是利用各种通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,依靠网络软件及通信协议实现资源共享和信息传递的系统。 2.概述 随着通信技术和网络技术的不断发展&#xff…

Ubuntu系统如何配置通过图形界面登录root用户

Ubuntu系统中的root账号默认是锁定的,但可以通过设置密码来启用。 需要注意的是,由于root用户具有对系统完全控制的权限,因此在使用root账户时应格外小心。一个错误的命令可能会导致系统损坏,这就是为什么Ubuntu默认不启用root账户…

微服务开发与实战Day08 - Elasticsearch

一、初始Elasticsearch 高性能分布式搜索引擎 1. 认识和安装 1.1 认识 Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:Apache Lucene - Welcome to Apache Lucene Lucene的优势&…

集合:泛型深入

一.泛型的好处 1.统一了数据类型 2.把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来。 二.泛型的细节 1.泛型中不能写基本数据类型 2.指定泛型的具体类型后,传递数据时,可以传入该类类型或者该类的子类类型 3.如果不…

shell脚本通过解析日志使用串口开关屏知识点整理

#!/bin/bash #logPath 写日志的存放路径 #logPath/home/workspace/tvs/trainborne logPath/home/firefly tmpFile$$ function getLogName() { #echo "$logPath/LCDController_"date "%Y%m%d000000.log" echo "LCDController_20240424000000.log&quo…

基于Raft算法实现的分布式键值对存储系统——学习笔记

目录 1 基于Raft算法实现的分布式键值对存储系统 1.1 模块 2 Raft 算法 2 .1 概念 2.2 raft角色(先简单了解,方便后续阅读) 2.3 raft想解决什么问题? 2.4 选举领导 2.5 领导者故障 附录: 参考文献&#xff1…

LeetCode 610, 28, 23

目录 610. 判断三角形题目链接表要求知识点思路代码 28. 找出字符串中第一个匹配项的下标题目链接标签使用 i n d e x O f ( ) indexOf() indexOf()思路代码 双指针思路代码 讲一讲双指针的缺点 23. 合并 K 个升序链表题目链接标签思路代码 610. 判断三角形 题目链接 610. 判…

电磁阀厂家:电磁阀结构设计需要考虑哪些方面?

随着科技的不断发展,电磁阀产品的应用范围愈发广泛。但在选购产品时,要注意产品的结构以及设计,以确保产品满足应用场景的各项要求。那么,电磁阀结构设计需要考虑哪些方面?接下来就让专业的电磁阀厂家来为大家简单介绍…

工具函数-算法

1. 实现四舍五入,保留两位小数 const v 0.0635455; // 方式1,保留2位小数,返回的是number格式 const formatted Math.round(v * 100) / 100; // 方式2,保留2位小数,返回的是字符串格式 const formatted v.toFixed(…

Vue67-Vuex简介

因为vuex是插件,所以,使用的时候:vue.use(插件名) 一、Vuex的意义和使用场景 红色的箭头,都是读数据。 若是,B、C、D都想修改A组件中的x数据(写):此时,A组件就是数据的接…

人声分离的5个方法分享,从入门到精通,伴奏提取手拿把捏!

人声分离通常是音乐制作、混音和卡拉OK中常用的重要技术之一。它的核心是将乐器伴奏从原始音轨中分离出来,使得用户可以单独处理或重混音频,创造出清晰干净的伴奏轨道。若缺乏强大的音频剪辑软件或专业人声分离工具,这一过程往往会比较困难。…

Redis解析与应用实践

Redis是一个高性能的键值存储系统,它的应用非常广泛,包括缓存、消息队列、排行榜等。本文将深度解析Redis的核心特性,并结合实际代码示例,展示如何在不同场景下应用Redis。 Redis数据类型与操作 Redis支持多种数据类型&#xff…

实用至上:智能体/Agent 是什么

Agent 的起源 不做词义追源,仅从大众角度,这个事儿是去年初开始的,也就是 2023 年 2-3 月。标志性事件包括: AutoGPT 等开源项目的发布,这是第一批基于自然语言的 AI 自动化实践:你告诉它一个任务&#xf…

在 Docker Desktop 上设置 HTTP/HTTPS/SOCKS5 代理

在 Docker Desktop 上设置 HTTP/HTTPS/SOCKS5 代理 在使用 Docker Desktop 时,可能会遇到需要通过代理服务器访问外部网络的情况。本篇博客将会介绍如何在 Linux、Windows 以及 MacOS 上的 Docker Desktop 设置 HTTP/HTTPS 以及 SOCKS5 代理。 在 Linux 上设置代理…

最新的kali Linux源,解决apt update报错说没有数字签名

原因: 国内源的地址大部分都是http开头,这些地址早就无法使用。 解决方案: wget archive.kali.org/archive-key.asc //下载签名 apt-key add archive-key.asc //安装签名 另外,需…

Vscode远程ubuntu

远程连接 到这里vscode远程到ubuntu和关闭远程连接,已完成 配置python环境 在远程目录下新建.vscode隐藏文件夹,文件夹里新建一个 settings.json 文件, 先远程服务器看下conda下的python虚拟环境位置 settings.json位置及内容如下 测试pyt…

M12单端I/O预铸法兰插座A-code

M12单端I/O预铸法兰插座A-code概述 M12单端I/O预铸连接器A-code是一种常用于工业自动化领域的连接器件,主要用于传感器和执行器之间的信号传输。它的设计遵循国际标准IEC 61076-2-101,具有良好的防水防尘性能,通常达到IP67的保护等级。M12连…