构建自己的 LINUX 系统(四)

本文介绍如何为myLinux预装WiFi模块,包括构建Python工具调整安装包列表、下载所需包文件并生成校验文件的过程。同时提供了Makefile用于自动化构建和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次我们要为 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

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值