这次我们要为 mylinux 预装应用程序了,考虑到 TinyCore 没有预装 wifi 模块,
所以我们在 mylinux 上安装一下吧!
准备 TC 的 wifi 模块包及所需要的依赖库
首先准备 wifi 模块和依赖库的安装包列表(你也可以自己去准备,不过我这里已经准备了一个了)
cd mylinux/
mkdir extends/wifi_module
wget -O extends/wifi_module/wifi.lst http://git.oschina.net/bxtkezhan/TCLinux-DEP/raw/master/wifi.lst?dir=0&filepath=wifi.lst&oid=d3486be12b4c6d5ce8a02b088962d859b25b0d8f&sha=552f7598cc915fdb0f8b713f653d60c33a675294
这个列表其实只是从 TC 的安装软件中直接获取的,并不方便我们使用,于是我们构建如下 Python 工具来调整它
mkdir tools
touch tools/make_good_lst.py
代码如下:
#! /usr/bin/env python3
def calc_space(line):
for i in range(len(line)):
if line[i] != ' ':
return i
def calc_levels(lines):
levels = list(set(map(calc_space, lines)))
levels.sort()
return levels
def calc_indexs(lines, level):
indexs = []
levels = list(map(calc_space, lines))
for i in range(len(levels)):
if levels[i] == level:
indexs.append(i)
return indexs
def sort_lines(lines):
levels = calc_levels(lines)
outlines = []
if len(levels) <= 1:
return lines
top_indexs = calc_indexs(lines, levels[0])
for i in range(len(top_indexs)-1):
newlines = lines[top_indexs[i]+1:top_indexs[i+1]]
sections = sort_lines(newlines)
outlines.extend(sections)
outlines.append(lines[top_indexs[i]])
else:
newlines = lines[top_indexs[-1]+1:]
sections = sort_lines(newlines)
outlines.extend(sections)
outlines.append(lines[top_indexs[-1]])
return outlines
def to_sort_set(lines):
lines = list(map(str.lstrip, lines))
outlines = []
for line in lines:
if line not in outlines:
outlines.append(line)
return outlines
def load_lst(filename):
try:
with open(filename, 'r') as f:
return f.readlines()
except IOError as e:
print('Read Faild, Error: {}'.format(e))
return False
def dump_lst(lines, filename):
try:
with open(filename, 'w') as f:
for line in lines:
f.write(line)
except IOError as e:
print('Write Faild, Error: {}'.format(e))
def make_good_lst(input_lst, output_lst):
lines = load_lst(input_lst)
if lines != False and len(lines) > 0:
lines = sort_lines(lines)
lines = to_sort_set(lines)
dump_lst(lines, output_lst)
if __name__ == '__main__':
import sys
if len(sys.argv) != 3:
print('Bad CMD!')
else:
make_good_lst(sys.argv[1], sys.argv[2])
现在我们来使用它生成我们需要的包列表
python3 tools/make_good_lst.py extends/wifi_module/wifi.lst extends/wifi_module/wifi.lst
下载表单中包文件并批量生成校验文件
cd extends/wifi_module
for tcz in $(cat wifi.lst); do wget "http://tinycorelinux.net/7.x/x86/tcz/$tcz"; done
for tcz in *.tcz; do md5sum $tcz > "$tcz.md5.txt"; done
ls
cd ../..
重构我们的 mylinux
编写 mylinux 下的 Makefile
QEMU:=qemu-system-i386
out.iso: boot/ cde/ extends/
mkdir build/
cp boot/ build/ -af
cp cde/ build/ -af
cp extends/tcz_lib/* build/cde/optional/ -af
cp extends/wifi_module/*.tcz* build/cde/optional/ -af
cat extends/wifi_module/wifi.lst >> build/cde/copy2fs.lst
cat extends/wifi_module/wifi.lst >> build/cde/onboot.lst
cat extends/wifi_module/wifi.lst >> build/cde/xbase.lst
mkisofs -D -r -V "mylinux v0.10" -cache-inodes -J -l \
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -o out.iso build/
isohybrid out.iso
cp -fv out.iso release/mylinux.iso
run: out.iso
${QEMU} -cdrom out.iso -boot d -m 256
clean:
rm -rf out.iso build/
重构并运行测试
sudo make clean
sudo make
make run