根文件系统构建-busybox中文支持

一.  简介

根文件系统里面就是一堆的可执行文件和其他文件组成的?难道我们得一个一个的从网上去下载这些文件?显然这是不现实的!那么有没有人或者组织专门干这个事呢? 他们负责“收集”这些文件,然后将其打包,像我们这样的开发者可以直接拿来用。答案是有 的,它就叫做 BusyBox

根文件系统制作除了使用 busybox来制作外,还有很多成熟化的根文件系统构建方式,例如 buildroot,yocto

BusyBox 是一个集成了大量的 Linux 命令和工具的软件,像 lsmvifconfig 等命令 BusyBox 都会提供。BusyBox 就是一 个大的工具箱,这个工具箱里面集成了 Linux 的许多工具和命令。一般下载 BusyBox 的源码, 然后配置 BusyBox,选择自己想要的功能,最后编译即可。

二.  busybox 构建根文件系统

这里我们使用 busybox 打包制作根文件系统。构建的根文件系统调试,我们通过 nfs 网络挂载,也就是将根文件系统存放到 ubuntu系统下,开发板启动以后,通过 nfs服务使用 ubuntu下的根文件系统。

1.  下载 busybox源码

BusyBox 可以在其官网下载到,官网地址为:

https://busybox.net/

打开官网后,如下打开 "Download Source" 选项,如下:

可以看出,目前最新的 BusyBox 版本是 1.36.1
不过正点原子的左神建议大家,使用我们开 发板光盘里面提供的 1.29.0 版本的 BusyBox 。因为左神说他测试 1.29.0 版本目前还没有出现任何问 题。
正点原子提供的 busybox源码包的路径为: 例程源码 -> BusyBox 源码->busybox-1.29.0.tar.bz2

2.  打开 busybox的中文支持

将正点原子提供的 busybox源码包拷贝到 ubuntu系统下,并加压源码包。之后通过 vscode打开 busybox源码。

如果默认直接编译 busybox 的话,在使用 SecureCRT 的时候中文字符是显示不正常的,中文字符会显示为 ? ,例如,你的中文目录,中文文件都显示为 ? 。不知道从哪个版本开始 busybox 中的 shell 命令对中文输入即显示做了限制,即使内核支持中文但在 shell 下也依然无法正确显 示。
所以我们需要修改 busybox 源码,取消 busybox 对中文显示的限制。

更改分两个部分:printable_string.c 与 unicode.c 更改。

打开文件 busybox-1.29.0/libbb/printable_string.c,找到 printable_string() 函数,屏蔽或更改后代码如下:
const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str)
{char *dst;const char *s;s = str;while (1) {
.................................../* 注释掉下面这个两行代码 *//*	if (c >= 0x7f)break;     */s++;}#if ENABLE_UNICODE_SUPPORTdst = unicode_conv_to_printable(stats, str);
#else{
.................................../* 修改下面代码 *//*	if (c < ' ' || c >= 0x7f) */if(c < ' ')*d = '?';d++;}if (stats) {stats->byte_count = (d - dst);stats->unicode_count = (d - dst);stats->unicode_width = (d - dst);}}
#endifreturn auto_string(dst);
}

可以看出,屏蔽了 第10~11行的代码:即当字符大于 0X7F 以后就跳出去了。 

去掉了第 21行关于当字符大于 0X7F 的判断。

接着打开文件 busybox-1.29.0/libbb/unicode.c,找到unicode_conv_to_printable2函数,更改后的代码如下:

static char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t *stats, const char *src, unsigned width, int flags)
{char *dst;unsigned dst_len;unsigned uni_count;unsigned uni_width;if (unicode_status != UNICODE_ON) {char *d;if (flags & UNI_FLAG_PAD) {d = dst = xmalloc(width + 1);while ((int)--width >= 0) {
............................................/* 修改下面一行代码 *//*	*d++ = (c >= ' ' && c < 0x7f) ? c : '?';  */*d++ = (c >= ' ') ? c : '?';src++;}*d = '\0';} else {d = dst = xstrndup(src, width);while (*d) {unsigned char c = *d;/* 修改下面一行代码 *//*if (c < ' ' || c >= 0x7f) */if(c < ' ')*d = '?';d++;}
.............................................
}

可以看出,第 15行,当字符大于 0X7F 以后,*d++就为‘?’。将这一行进行更改。

第 25 行,,当字符大于 0X7F 以后,*d 也为‘?’。 也更改这一行判断。

busybox 中文字符支持跟代码修改有关的就改好了,最后还需要配置 busybox来使能 unicode 码,这个稍后我们配置 busybox 的时候在设置。

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

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

相关文章

阿里云域名解析到非默认端口处理方式

1.需配置两条解析记录&#xff0c;如下图 2.第一条配置A记录&#xff0c;ip指向部署服务器 3.第二条配置隐形记录&#xff0c;指向第一条的网址&#xff0c;并附带端口号&#xff0c;最终访问第二条的网址就不用带非默认端口号了。 4.最终浏览器访问

[FC][常见Mapper IRQ研究]

本次IRQ研究了如下表所示Mapper的IRQ操作: 卡带名Mapper号VRC373VRC421,23,25VRC624 & 26VRC785MMC34MMC410MMC55Sunsoft FME-769Namco16319Jaleco SS 8800618RAMBO-164 共计11种Mapper的IRQ操作使用例子 代码内有详细注释, 希望能帮助到感兴趣的人. Mapper控制代码(MMC3…

matplotlib学习

显示两个figure 坐标上刻度修改 plt.xlim() 下标范围 plt.xticks() 替换新的下标 图例显示 散点图 subplot多合一显示

docker部署frp穿透内网

文章目录 &#xff08;1&#xff09;部署frps服务器&#xff08;2&#xff09;部署frpc客户端&#xff08;3&#xff09;重启与访问frp&#xff08;4&#xff09;配置nginx反向代理 &#xff08;1&#xff09;部署frps服务器 docker安装参考文档&#xff1a;docker基本知识 1…

Tmux奇技淫巧

Tmux奇技淫巧 在日常的开发工作中&#xff0c;终端是我们最常用的工具之一。在终端中我们可以调用各种解释器&#xff0c;来执行命令&#xff0c;完成我们的工作。然而&#xff0c;对于只使用终端的默认功能的开发者来说&#xff0c;他们可能会错过一些强大的工具和技巧&#…

【SLAM十四讲-9.3 实践Ceres BA-BAL数据集problem-16-22106-pre.txt分析】

数据集Dubrovnik Dataset 杜布罗夫尼克数据集的链接&#xff1a;Bundle Adjustment in the Large https://grail.cs.washington.edu/projects/bal/ problem-16-22106-pre.txt.bz216 22106 83718&#xff08;这里是第1行&#xff09; 0 0 -3.859900e02 3.871200e02&#x…

Gson的用法详解

一、简介 Gson&#xff08;又称Google Gson&#xff09;是Google公司发布的一个开放源代码的Java库&#xff0c;主要用途为序列化Java对象为JSON字符串&#xff0c;或反序列化JSON字符串成Java对象。 Gson官网&#xff1a;gson Gson源码地址&#xff1a;google/gson 二、依赖…

STM32F407-14.3.8-01强制输出模式

强制输出模式 在输出模式&#xff08;TIMx_CCMRx 寄存器中的 CCxS② 位 00&#xff09;下&#xff0c;可直接由软件将每个输出比较信号&#xff08;OCxREF④ 和 OCx⑥/OCxN⑦&#xff09;强制设置为有效电平或无效电平&#xff0c;而无需考虑输出比较寄存器和计数器之间的任何…

CMake构建工具

文章目录 CMake构建工具1.概念2.mk文件3.CmakeList4.预编译 CMake构建工具 1.概念 Android构建原始库的工具&#xff0c;对mk构建工具封装&#xff0c;还是makefile。 加载lib库 2.mk文件 //call调用test-dir这个方法&#xff0c;返回mk文件的路径&#xff0c;LOCAL_PATH这…

一文搞懂设计模式之责任链模式

大家好&#xff0c;我是晴天。我们又见面了&#xff0c;本周我们继续学习设计模式&#xff0c;本周将同大家一起学习责任链模式。 场景引入 我们回想一下自己曾经经历过的考学场景&#xff0c;我们是如何一步一步考上大学的&#xff08;为了简化过程只提取核心环节&#xff09…

如何使用vue组件

目录 1&#xff1a;组件之间的父子关系 2&#xff1a;使用组件的三个步骤 3&#xff1a;components组件的是私有子组件 4&#xff1a;在main.js文件中使用Vue.component全局注册组件 1&#xff1a;组件之间的父子关系 一&#xff1a;首先封装好的组件是不存在任何的关系的…

强化学习简明教程

到目前为止&#xff0c;我们主要关注监督学习问题&#xff08;主要是分类&#xff09;。 在监督学习中&#xff0c;我们得到某种由输入/输出对组成的训练数据&#xff0c;目标是能够在学习模型后根据一些新输入来预测输出。 例如&#xff0c;我们之前研究过 MNIST 的卷积神经网…

阅读笔记|A Survey of Large Language Models

阅读笔记 模型选择&#xff1a;是否一定要选择参数量巨大的模型&#xff1f;如果需要更好的泛化能力&#xff0c;用于处理非单一的任务&#xff0c;例如对话&#xff0c;则可用选更大的模型&#xff1b;而对于单一明确的任务&#xff0c;则不一定越大越好&#xff0c;参数小一…

BearPi Std 板从入门到放弃 - 1 引气入体篇

安装相关开发工具 Keil MDK 工具下载 略, 自行体会 Keil 芯片支持包下载 Keil 包 网址 https://www.keil.com/pack 此处下载的是STM32L4xx的支持包 https://www.keil.com/pack/Keil.STM32L4xx_DFP.2.6.2.pack STM32CubeMX 下载与包下载 i. 下载&#xff08;需要使用用户&…

DouyinAPI接口系列丨Douyin商品详情数据接口丨Douyin视频详情数据接口

抖音商品详情API是抖音开放平台提供的一套API接口&#xff0c;用于获取商品详情信息。通过该API&#xff0c;开发者可以获取到商品的详细信息&#xff0c;包括商品ID、名称、描述、价格、销量、评价等信息。 在使用抖音商品详情API之前&#xff0c;需要先注册并登录抖音开放平…

fl studio21.2最新汉化中文完整版网盘下载

fl studio 21中文版是Image-Line公司继20版本之后更新的水果音乐制作软件&#xff0c;很多用户不太理解&#xff0c;为什么新版本不叫fl studio 21或fl studio2024&#xff0c;非得直接跳到21.2版本&#xff0c;其实该版本是为了纪念该公司22周年&#xff0c;所以该版本也是推出…

系统监控:使用日志文件 journalctl的使用

journalctl 显示最近登录的&#xff1a; 上面有最近登录的时间&#xff0c;和系统操作 几十年来&#xff0c;Linux日志记录一直由syslogd守护进程管理。Syslogd将收集系统处理和应用程序发送到/dev/log伪设备的日志消息。然后&#xff0c;它会将消息定向到/var/log/目录中适当…

MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!

想要在Mac电脑上轻松管理和传输您的安卓设备文件吗&#xff1f;MacDroid Pro for Mac 是您的最佳选择&#xff01;这款强大的文件传输助手可以让您在Mac上与安卓设备之间实现快速、方便的文件传输。 MacDroid Pro for Mac 提供了简单易用的界面&#xff0c;让您能够直接在Mac上…

人工智能和网络安全:坏与好

人工智能似乎可以并且已经被用来帮助网络犯罪和网络攻击的各个方面。 人工智能可以用来令人信服地模仿真人的声音。人工智能工具可以帮助诈骗者制作更好、语法正确的网络钓鱼消息&#xff08;而糟糕的语法往往会暴露出漏洞&#xff09;&#xff0c;并将其翻译成多种语言&…

字符函数 和 字符串函数

今天我打算介绍一些字符函数和字符串函数&#xff0c;有一些字符串函数我实现了模拟&#xff0c;但文章中没有放出来&#xff0c;如果需要的欢迎来到我的gitee里面拿取&#xff08;在test.c11-23里面&#xff09; 这是我的gitee:小汐 (lhysxx) - Gitee.com 字符函数 1. islow…