mirror of
https://github.com/superconvert/smart-os.git
synced 2024-11-26 04:01:35 +08:00
Update README.md
This commit is contained in:
parent
06c7ac1ef5
commit
6c7e556967
93
README.md
93
README.md
@ -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 :
|
||||||
|
Loading…
Reference in New Issue
Block a user