Update README.md

This commit is contained in:
superconvert 2022-08-14 07:17:34 +08:00 committed by GitHub
parent 06c7ac1ef5
commit 6c7e556967
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,8 +1,5 @@
# smart-os 一个小巧的 linux 系统 # smart-os 一个小巧的 linux 系统
本项目给大家演示了怎么样快速制作一个小巧切功能齐全的 linux 操作系统 本项目给大家演示了怎么样快速制作一个小巧切功能齐全的 linux 操作系统, 项目地址 https://github.com/superconvert/smart-os
# 项目地址
https://github.com/superconvert/smart-os
# 功能与特点 # 功能与特点
1. 支持挂载多块硬盘 1. 支持挂载多块硬盘
@ -13,8 +10,7 @@ https://github.com/superconvert/smart-os
6. 支持 docker 启动 6. 支持 docker 启动
7. 最精简模式 64 M 7. 最精简模式 64 M
8. 支持驱动相关演示 8. 支持驱动相关演示
9. 支持 smart_rtmpd 流媒体服务器运行 9. 支持 smart_rtmpd 流媒体服务器运行 https://github.com/superconvert/smart_rtmpd
https://github.com/superconvert/smart_rtmpd
# 用途与场景 # 用途与场景
1. 操作系统原理教学 1. 操作系统原理教学
@ -23,7 +19,13 @@ https://github.com/superconvert/smart_rtmpd
4. 嵌入式设备定制 4. 嵌入式设备定制
5. IoT场景操作系统定制 5. IoT场景操作系统定制
# 环境说明 # TODO 列表
1. 增加 arm 版本
2. 增加图形界面演示
3. 支持 ISO 制作
4. 防火墙
# 制作流程
本脚本 Ubuntu 18.04 上做的,别的系统应该改动不大,有需要的朋友可以自行修改。 本脚本 Ubuntu 18.04 上做的,别的系统应该改动不大,有需要的朋友可以自行修改。
1. 准备系统环境 1. 准备系统环境
@ -48,6 +50,38 @@ https://github.com/superconvert/smart_rtmpd
是不是制作一个操作系统很简单! 是不是制作一个操作系统很简单!
磁盘空间可以任意扩展,可以上网,可以根据需要扩展自己想要的组件,我已经试验成功,在 smart-os 内运行流媒体服务器 smart_rtmpd 了 磁盘空间可以任意扩展,可以上网,可以根据需要扩展自己想要的组件,我已经试验成功,在 smart-os 内运行流媒体服务器 smart_rtmpd 了
# 网络拓扑图
```shell
+----------------------------------------------------------------+-----------------------------------------+-----------------------------------------+
| Host | Container 1 | Container 2 |
| | | |
| +------------------------------------------------+ | +-------------------------+ | +-------------------------+ |
| | Newwork Protocol Stack | | | Newwork Protocol Stack | | | Newwork Protocol Stack | |
| +------------------------------------------------+ | +-------------------------+ | +-------------------------+ |
| + + | + | + |
|...............|....................|...........................|...................|.....................|....................|....................|
| + + | + | + |
| +-------------+ +---------------+ | +---------------+ | +---------------+ |
| | 192.168.0.3 | | 192.168.100.1 | | | 192.168.100.6 | | | 192.168.100.8 | |
| +-------------+ +---------------+ +-------+ | +---------------+ | +---------------+ |
| | eth0 | | br0 |<--->| tap0 | | | eth0 | | | eth0 | |
| +-------------+ +---------------+ +-------+ | +---------------+ | +---------------+ |
| + + + | + | + |
| | | | | | | | |
| | + +------------------------------+ | | |
| | +-------+ | | | |
| | | tap1 | | | | |
| | +-------+ | | | |
| | + | | | |
| | | | | | |
| | +-------------------------------------------------------------------------------------------+ |
| | | | |
| | | | |
+---------------|------------------------------------------------+-----------------------------------------+-----------------------------------------+
+
Physical Network (192.168.0.0/24)
```
# 注意事项 # 注意事项
1. 由于smart-os安装了 glibc 动态库,这个严重依赖动态库加载器/链接器 ld-linux-x86-64.so.2 ,由于应用程序都是通过动态编译链接的,当一个需要动态链接的应用被操作系统加载时,系统必须要定位然后加载它所需要的所有动态库文件。这项工作是由 ld-linux.so.2 来负责完成的,当程序加载时,操作系统会将控制权交给 ld-linux.so 而不是交给程序正常的入口地址。 ld-linux.so.2 会寻找然后加载所有需要的库文件然后再将控制权交给应用的起始入口。ld-linux-x86-64.so.2 其实就是 ld-linux.so.2 的软链,它必须存在于 /lib64/ld-linux-x86-64.so.2 下,否则,我们动态编译的 busybox 依赖 glibc 库glibc 库的加载需要 ld-linux-x86-64.so如果/lib64目录下不存在它就会导致<font color=red>系统启动时会直接 panic</font>,这个问题需要特别注意!!! 1. 由于smart-os安装了 glibc 动态库,这个严重依赖动态库加载器/链接器 ld-linux-x86-64.so.2 ,由于应用程序都是通过动态编译链接的,当一个需要动态链接的应用被操作系统加载时,系统必须要定位然后加载它所需要的所有动态库文件。这项工作是由 ld-linux.so.2 来负责完成的,当程序加载时,操作系统会将控制权交给 ld-linux.so 而不是交给程序正常的入口地址。 ld-linux.so.2 会寻找然后加载所有需要的库文件然后再将控制权交给应用的起始入口。ld-linux-x86-64.so.2 其实就是 ld-linux.so.2 的软链,它必须存在于 /lib64/ld-linux-x86-64.so.2 下,否则,我们动态编译的 busybox 依赖 glibc 库glibc 库的加载需要 ld-linux-x86-64.so如果/lib64目录下不存在它就会导致<font color=red>系统启动时会直接 panic</font>,这个问题需要特别注意!!!
@ -80,44 +114,6 @@ https://github.com/superconvert/smart_rtmpd
5. 我们编译 cairo 通常情况下会遇到很多问题,如果 cairo 编译出现问题,怎么办,有些错误信息网上很难搜到 5. 我们编译 cairo 通常情况下会遇到很多问题,如果 cairo 编译出现问题,怎么办,有些错误信息网上很难搜到
一定看它编译时生成的 config.log 文件,错误信息很详细!可以根据提示信息去解决问题 一定看它编译时生成的 config.log 文件,错误信息很详细!可以根据提示信息去解决问题
# TODO 列表
1. 增加 arm 版本
2. 增加图形界面演示
3. 支持 ISO 制作
4. 账号和密码
5. 防火墙
# 网络拓扑图
```shell
+----------------------------------------------------------------+-----------------------------------------+-----------------------------------------+
| Host | Container 1 | Container 2 |
| | | |
| +------------------------------------------------+ | +-------------------------+ | +-------------------------+ |
| | Newwork Protocol Stack | | | Newwork Protocol Stack | | | Newwork Protocol Stack | |
| +------------------------------------------------+ | +-------------------------+ | +-------------------------+ |
| + + | + | + |
|...............|....................|...........................|...................|.....................|....................|....................|
| + + | + | + |
| +-------------+ +---------------+ | +---------------+ | +---------------+ |
| | 192.168.0.3 | | 192.168.100.1 | | | 192.168.100.6 | | | 192.168.100.8 | |
| +-------------+ +---------------+ +-------+ | +---------------+ | +---------------+ |
| | eth0 | | br0 |<--->| tap0 | | | eth0 | | | eth0 | |
| +-------------+ +---------------+ +-------+ | +---------------+ | +---------------+ |
| + + + | + | + |
| | | | | | | | |
| | + +------------------------------+ | | |
| | +-------+ | | | |
| | | tap1 | | | | |
| | +-------+ | | | |
| | + | | | |
| | | | | | |
| | +-------------------------------------------------------------------------------------------+ |
| | | | |
| | | | |
+---------------|------------------------------------------------+-----------------------------------------+-----------------------------------------+
+
Physical Network (192.168.0.0/24)
```
# libxcb 的编译,具体详情参见 mk_xorg.sh # libxcb 的编译,具体详情参见 mk_xorg.sh
1. 需要安装 apt install -y python-xcbgen 这个库,这个库会根据 xcbproto 提供的 xml 文件生成对应的 h 文件和 c 文件 1. 需要安装 apt install -y python-xcbgen 这个库,这个库会根据 xcbproto 提供的 xml 文件生成对应的 h 文件和 c 文件
2. 增加变量 export PKG_CONFIG_SYSROOT_DIR="${xclient_dir}" 否则,编译过程中找 xml 文件的路径不对 2. 增加变量 export PKG_CONFIG_SYSROOT_DIR="${xclient_dir}" 否则,编译过程中找 xml 文件的路径不对
@ -129,6 +125,13 @@ https://github.com/superconvert/smart_rtmpd
sed -i "8 i reload(sys)" src/c_client.py sed -i "8 i reload(sys)" src/c_client.py
sed -i "9 i sys.setdefaultencoding('utf8')" src/c_client.py sed -i "9 i sys.setdefaultencoding('utf8')" src/c_client.py
# xfce 的编译
1. xfce 的编译相当于对 xfce 做一个整体的 cross compile工作量相当庞大有各个组件之间有顺序关系有依赖关系
2. 会依赖很多开发包,系统工具,开发包理论上全需要源码编译,工作量巨大,开发包和系统工具有版本要求
3. 环境变量要求比如找不到头文件找不工具路径undefined reference to XXX 这些都需要更改环境变量和编译参数进行不同的尝试
4. 编译过程中,引用的库存在多版本的问题,这个一定要理清楚用哪个版本,编译时,把 search path 的优先次序要理清
5. 有很多新工具需要熟悉比如meson, g-ir-scanner, g-ir-compile 等,这些是工具,不是开发包,刚接触不了解,结果编译 gobject-introspection 搞了很长时间
# 拓展知识 # 拓展知识
* ramfs : * ramfs :