diff --git a/README.md b/README.md index ed7b9e5..c9cdfd1 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,5 @@ # smart-os 一个小巧的 linux 系统 -本项目给大家演示了怎么样快速制作一个小巧切功能齐全的 linux 操作系统 - -# 项目地址 -https://github.com/superconvert/smart-os +本项目给大家演示了怎么样快速制作一个小巧切功能齐全的 linux 操作系统, 项目地址 https://github.com/superconvert/smart-os # 功能与特点 1. 支持挂载多块硬盘 @@ -13,8 +10,7 @@ https://github.com/superconvert/smart-os 6. 支持 docker 启动 7. 最精简模式 64 M 8. 支持驱动相关演示 -9. 支持 smart_rtmpd 流媒体服务器运行 -https://github.com/superconvert/smart_rtmpd +9. 支持 smart_rtmpd 流媒体服务器运行 https://github.com/superconvert/smart_rtmpd # 用途与场景 1. 操作系统原理教学 @@ -23,7 +19,13 @@ https://github.com/superconvert/smart_rtmpd 4. 嵌入式设备定制 5. IoT场景操作系统定制 -# 环境说明 +# TODO 列表 +1. 增加 arm 版本 +2. 增加图形界面演示 +3. 支持 ISO 制作 +4. 防火墙 + +# 制作流程 本脚本 Ubuntu 18.04 上做的,别的系统应该改动不大,有需要的朋友可以自行修改。 1. 准备系统环境 @@ -48,6 +50,38 @@ https://github.com/superconvert/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目录下不存在它,就会导致系统启动时会直接 panic,这个问题需要特别注意!!! @@ -80,44 +114,6 @@ https://github.com/superconvert/smart_rtmpd 5. 我们编译 cairo 通常情况下会遇到很多问题,如果 cairo 编译出现问题,怎么办,有些错误信息网上很难搜到 一定看它编译时生成的 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 1. 需要安装 apt install -y python-xcbgen 这个库,这个库会根据 xcbproto 提供的 xml 文件生成对应的 h 文件和 c 文件 2. 增加变量 export PKG_CONFIG_SYSROOT_DIR="${xclient_dir}", 否则,编译过程中找 xml 文件的路径不对 @@ -128,6 +124,13 @@ https://github.com/superconvert/smart_rtmpd 6. 编辑 libxcb 的文件 src/c_client.py ,解决 UnicodeEncodeError 的问题 ordinal not in range(128),Python 默认字符集是 ascii 码 sed -i "8 i reload(sys)" 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 搞了很长时间 # 拓展知识