随身wifi折腾入门(2)-- 编译&刷入系统

教程经验 · 2023-04-05 · 2151 人浏览

(需更新)

社区已经有很多编译的系统可玩了,但是为了追求彻底,我还是想自己编译一个系统用用看,顺便试着调整内核进行超频...
本文参照多个文章整理后编写
编译UFI设备的Debian固件
编译410随身wifi_Debian超频版教程&经验
关于 OpenStick

如果只想刷入社区的系统镜像,可看第5节 系统刷入

系统与环境

编译需要在主机为Linux系统下进行,因此本次选择vmware虚拟机进行

系统镜像: Ubuntu2210_Desktop_amd64

编译过程中全程以普通用户进行,不能进入root用户编译,仅使用sudo提权

系统安装完成后打开终端开始换源,如果不换源后续安装软件会较慢:

sudo vi /etc/apt/sources.list

注释全部内容,更换为:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic-backports main restricted universe multiverse

# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic-security main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ kinetic-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ kinetic-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ kinetic-proposed main restricted universe multiverse

工具准备

输入指令安装软件包:

sudo apt install binfmt-support qemu-user-static gcc-10-aarch64-linux-gnu kernel-package fakeroot simg2img img2simg mkbootimg bison flex gcc-aarch64-linux-gnu pkg-config libncurses-dev libssl-dev unzip git

克隆仓库代码:

git clone https://github.com/OpenStick/linux.git --depth=1

内核超频

此时不急着去编译源码,为了获得更佳的性能,先对其进行超频修改

进入目录 linux/drivers/clk/qcom 找到 a53-pll.c文件,进行修改

打开文件后,可根据下图为参考,21-27行内,第一块为运行频率,第二块则为供电电压。根据前面的规律,大致可以判断为每提升200Mhz增加10电压值,但是由于再往后就超出了芯片设计频率,同时要考虑功耗与发热,因此往后提升时要略增加一些电压值,如 { 1841600000, 96, 0x0, 0x1, 0 }

static const struct pll_freq_tbl a53pll_freq[] = {
    {  998400000, 52, 0x0, 0x1, 0 },
    { 1094400000, 57, 0x0, 0x1, 0 },
    { 1152000000, 62, 0x0, 0x1, 0 },
    { 1209600000, 63, 0x0, 0x1, 0 },
    { 1248000000, 65, 0x0, 0x1, 0 },
    { 1363200000, 71, 0x0, 0x1, 0 },
    { 1401600000, 73, 0x0, 0x1, 0 },
    { 1621600000, 84, 0x0, 0x1, 0 },
    { 1841600000, 96, 0x0, 0x1, 0 },
    { 1951600000, 103, 0x0, 0x1, 0 },
    { }
};

找到第二个目录 linux/arch/arm64/boot/dts/qcom 修改其中的 msm8916.dtsi 文件,在220行左右出现默认频率,在此之后进行增加,增加的频率需要在前一个文件内添加好

                opp-1363200000 {
            opp-hz = /bits/ 64 <1363200000>;
        };
        opp-1401600000 {
            opp-hz = /bits/ 64 <1401600000>;
        };
        opp-1621600000 {
            opp-hz = /bits/ 64 <1621600000>;
        };
        opp-1841600000 {
            opp-hz = /bits/ 64 <1841600000>;
        };
        opp-1951600000 {
            opp-hz = /bits/ 64 <1951600000>;
        };

内核编译

编译配置

回到刚刚git拉取的终端,开始执行编译前的配置

cd linux
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64
make msm8916_defconfig
make menuconfig

具体的make配置可以参考网上公共教程,也可以直接使用默认配置进行下一步

开始编译

这里的 -j4 请根据自己CPU的核心数或虚拟机分配核心数来修改

make -j4

生成软件包

生成debian格式的deb软件包:

fakeroot make-kpkg  --initrd --cross-compile aarch64-linux-gnu- --arch arm64  kernel_image kernel_headers

生成结束后,输入 ls ../ 即可查看生成的deb文件包

保留文件

在上一级目录创建bak文件夹,将必要的文件提取出来备用

路径:arch/arm64/boot/Image.gz

设备树dtb路径:arch/arm64/boot/dts/qcom/msm8916-handsome-openstick-xxxxxx 这里要根据设备型号选择,本文使用001B设备

也可以一次性打包多个设备版本,如再拉取一个 003 的棒子的设备树(与001c通用)

mkdir ../bak
cp arch/arm64/boot/Image.gz ../bak/

cp arch/arm64/boot/dts/qcom/msm8916-handsome-openstick-ufi001b.dtb ../bak/
cp arch/arm64/boot/dts/qcom/msm8916-handsome-openstick-ufi001c.dtb ../bak/

下载底包

下载debian底包,并将解压后的rootfs.img放到bak目录内

cd ../bak
wget https://github.com/OpenStick/OpenStick/releases/download/v1/debian.zip && unzip debian.zip
mv ./debian/rootfs.img ./

解包挂载

simg2img rootfs.img root.img
sudo mount root.img /mnt
sudo mount --bind /proc /mnt/proc 
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /sys /mnt/sys

将前面生成的deb软件包复制到 /mnt 目录

sudo cp ../linux-*.deb /mnt

使用 chroot 进入挂载的系统,移除系统内原有的linux-image包,并安装刚刚生成的deb软件包,安装后删除deb文件

sudo  chroot /mnt
dpkg -l | grep -E "linux-headers|linux-image" |awk '{print $2}'|xargs dpkg -P
dpkg -i *.deb
rm linux-*.deb 

系统优化

与正常debian系统一样进行换源等常规优化操作

换源:

cat>/etc/apt/sources.list<<EOF
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
# deb-src http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free
EOF

安装常用软件并调整时区 区域:6 Asia 时区:70 Shanghai

apt install locales usbutils curl wget fdisk net-tools nano
dpkg-reconfigure locales
dpkg-reconfigure tzdata

启用Root并默认自动登录,并修改root密码(本文设置为123123)

sed -i '/PermitRootLogin /c PermitRootLogin yes' /etc/ssh/sshd_config
sed -i '/PasswordAuthentication /c PasswordAuthentication yes' /etc/ssh/sshd_config
passwd root

创建 rc.local 开机启动脚本

cat>>/etc/systemd/system/rc-local.service<<EOF
[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#

exit 0
EOF

systemctl daemon-reload && systemctl enable rc-local
history -c

配置结束,输入 exit 可退出

/mnt/boot/initrd**.img 取出到 bak 文件夹内备用

cp /mnt/boot/initrd.img-* ./

取消挂载并打包

取消刚刚的boot.img的挂载

sudo umount /mnt/proc 
sudo umount /mnt/dev/pts
sudo umount /mnt/dev
sudo umount /mnt/sys
sudo umount /mnt

将 boot.img 转为刷机用的 rootfs.img 格式

img2simg root.img rootfs.img

将Image和dtb合并(由于前面拉了两个设备树,这里合并两次)

cat Image.gz msm8916-handsome-openstick-ufi001b.dtb>ufi001b-kernel-dtb
cat Image.gz msm8916-handsome-openstick-ufi001c.dtb>ufi001c-kernel-dtb

将前面提取出来的 initrd**.img 改名为 initrd.img

mv initrd.img-* initrd.img

生成镜像

生成001b的镜像

mkbootimg --base 0x80000000 --kernel_offset 0x00080000 --ramdisk_offset 0x02000000 --tags_offset 0x01e00000 --pagesize 2048 --second_offset 0x00f00000 --ramdisk initrd.img --cmdline "earlycon root=PARTUUID=a7ab80e8-e9d1-e8cd-f157-93f69b1d141e console=ttyMSM0,115200 no_framebuffer=true rw" --kernel ufi001b-kernel-dtb -o ufi001b-boot.img

生成001c/003的镜像

mkbootimg --base 0x80000000 --kernel_offset 0x00080000 --ramdisk_offset 0x02000000 --tags_offset 0x01e00000 --pagesize 2048 --second_offset 0x00f00000 --ramdisk initrd.img --cmdline "earlycon root=PARTUUID=a7ab80e8-e9d1-e8cd-f157-93f69b1d141e console=ttyMSM0,115200 no_framebuffer=true rw" --kernel ufi001c-kernel-dtb -o ufi001c-boot.img

整理文件,将boot与rootfs.img整理出来(可选)

mkdir ufi_debian
mv ufi001*.img ./ufi_debian/
mv rootfs.img ./ufi_debian/

最后,将这些文件从虚拟机复制到主机,接入棒子,准备下一个环节:开始刷机

刷入系统

要想把Debian刷入到棒子内,需要在棒子的fastboot模式下刷入。如果棒子是刚做完第一章的备份工作后,只需要跳过第0节继续往下跟着做即可;如果棒子已经刷入过openwrt或者Debian等linux系统,请备份好必要资料后,看下面第0节进入fastboot模式。除了esim,务必不要插入sim卡的时候刷机,否则可能会无法检测到卡,出现这种情况重新刷入就可以了(除非刷机包有要求插卡刷入)

第0节

已刷机的棒子进fastboot

如果你的棒子是新买的并且已经做完备份工作了,可以直接跳过该小节,直接使用adb重启至fastboot

备份好必要文件后,拔下棒子

按板子上的RST按钮,并插入到电脑,此时电脑会识别到9008设备

使用第一章的软件 Qualcomm Premium Tool V2.4 ,打开后扫描分区,按下图所示格式化boot分区

格式化完成后,拔掉棒子,重新插入,即可自动进入fastboot模式

打开第一章的adb工具包 tools 文件夹,在文件夹上方地址栏输入cmd,打开cmd窗口

输入指令 fastboot devices 即可查看是否有设备连接

如果连接成功,即可开始跳转到第2节

第1节

进入到fastboot模式,如果是从第0节完成,则可以跳过这一节往下看;如果棒子刚买回来且做了备份工作后,可以看这一节进入fastboot

正常插入棒子,等待其开机,设备管理器显示adb即可

如果显示如下图,同时出现adb与9091设备,代表设备还没有完全开机,稍等片刻即可

打开第一章内的adb工具包 tools 文件夹,在文件夹上方地址栏输入cmd,打开cmd窗口

输入指令 adb devices ,查看是否有adb设备连接,如有,可继续执行指令 adb reboot bootloader

此时电脑会提示新设备接入,输入指令 fastboot devices 即可查看是否有设备连接

此时棒子成功进入fastboot模式,可以进行刷机

第2节

准备Debian\linux\openwrt刷入工具包,优先刷入ufi003(001c)

如果使用社区提供的刷机镜像压缩包,里面一般有全部分区文件和 flash.bat 刷机脚本,可以直接使用包里面的 flash.bat 一键刷入;如果只准备了rootfs.img 与 boot.img 和本文一样,那就需要下载基础包,将这俩文件放基础包内,并把 *-boot.img 改名为 boot.img 即可

基础包链接:https://www.123pan.com/s/Dpq0Vv-p9UHd.html 提取码:dkdF (本文采用这一个)

源链接:https://github.com/OpenStick/OpenStick/releases/tag/v1 (建议使用前面链接,本文有改动刷入脚本,可自动刷入lk2nd与rootfs、boot)

源链接配合源教程食用更佳:https://www.kancloud.cn/handsomehacker/openstick/2636506

将基础包下载后解压,可得到一个base文件夹。将前面生成的 rootfs.imgufi001c-boot.img 复制到该文件夹内,并将 ufi001c-boot.img 改名为 boot.img ,然后运行 flash.bat 即可开始刷入,不会超过3分钟(如果rootfs包较大,耗时也会久,如果长时间不跑进度可以尝试重新刷入,进入fastboot方法看第0节)

等显示 All done!! 之后棒子会自动重启,并尝试开机

如果在电脑里面找不到设备,可以参考文章:https://www.kancloud.cn/handsomehacker/openstick/2636506

本文结束,后续折腾请等待更新

教程 刷机
  1. 小原 09-16

    我按你的方法编译了一个debian,刷机后为什么用nmtui看不到附近的wifi了啊,是少了什么选线吗

Theme Jasmine by Kent Liao
beian
皖公网安备34122202000364号