mirror of
https://github.com/andreili/SBC_builder.git
synced 2025-08-23 19:04:06 +02:00
Add SQH modules support
This commit is contained in:
parent
df9cb17d29
commit
637e6d9fd8
@ -69,9 +69,14 @@
|
|||||||
"file": "arch/arm64/boot/dts/allwinner/overlay/sun50i-h616*.dtbo",
|
"file": "arch/arm64/boot/dts/allwinner/overlay/sun50i-h616*.dtbo",
|
||||||
"store_type": "boot",
|
"store_type": "boot",
|
||||||
"subdir": "dtb/allwinner/overlay"
|
"subdir": "dtb/allwinner/overlay"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "",
|
||||||
|
"store_type": "boot",
|
||||||
|
"kmods": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods"
|
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods/usr"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"parent": "rtl8189ES_linux",
|
"parent": "rtl8189ES_linux",
|
||||||
|
@ -71,9 +71,14 @@
|
|||||||
"file": "arch/arm64/boot/dts/%{DTB_FILE}%",
|
"file": "arch/arm64/boot/dts/%{DTB_FILE}%",
|
||||||
"store_type": "boot",
|
"store_type": "boot",
|
||||||
"subdir": "dtb/rockchip"
|
"subdir": "dtb/rockchip"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "",
|
||||||
|
"store_type": "boot",
|
||||||
|
"kmods": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods"
|
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods/usr"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"install":
|
"install":
|
||||||
|
@ -70,9 +70,14 @@
|
|||||||
"file": "arch/arm64/boot/dts/allwinner/overlay/sun50i-h616*.dtbo",
|
"file": "arch/arm64/boot/dts/allwinner/overlay/sun50i-h616*.dtbo",
|
||||||
"store_type": "boot",
|
"store_type": "boot",
|
||||||
"subdir": "dtb/allwinner/overlay"
|
"subdir": "dtb/allwinner/overlay"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "",
|
||||||
|
"store_type": "boot",
|
||||||
|
"kmods": true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods"
|
"makeopts": "CROSS_COMPILE=%{CROSS_C}% ARCH=arm64 INSTALL_MOD_PATH=%{out_dir}%/kmods/usr"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"install":
|
"install":
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
{
|
{
|
||||||
"variables":
|
"variables":
|
||||||
[
|
[
|
||||||
"USER_LOGIN:klipper"
|
"USER_LOGIN:klipper",
|
||||||
|
"USER_ID:1010",
|
||||||
|
"TIME_ZONE:Europe/Warsaw"
|
||||||
],
|
],
|
||||||
"stage3_info":
|
"stage3_info":
|
||||||
{
|
{
|
||||||
@ -198,17 +200,60 @@
|
|||||||
{
|
{
|
||||||
"steps":
|
"steps":
|
||||||
[
|
[
|
||||||
{ "chroot": "systemctl enable NetworkManager ntpdate sshd" },
|
{
|
||||||
|
"file": "/etc/systemd/system/prepare_shutdown.service",
|
||||||
|
"append": false,
|
||||||
|
"lines": [
|
||||||
|
"[Unit]",
|
||||||
|
"Description=Prepare a shutdown script to correctly unmount all filesystems",
|
||||||
|
"[Install]",
|
||||||
|
"WantedBy=multi-user.target",
|
||||||
|
"[Service]",
|
||||||
|
"Type=oneshot",
|
||||||
|
"ExecStart=sh -c \"mkdir -p /run/initramfs && cd /run/initramfs && tar xf /usr/shutdown.tar.xz\""
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "/etc/systemd/system/sync.service",
|
||||||
|
"append": false,
|
||||||
|
"lines": [
|
||||||
|
"[Unit]",
|
||||||
|
"Description=Sync all data",
|
||||||
|
"StartLimitIntervalSec=0",
|
||||||
|
"[Service]",
|
||||||
|
"Type=simple",
|
||||||
|
"Restart=always",
|
||||||
|
"RestartSec=10",
|
||||||
|
"User=root",
|
||||||
|
"ExecStart=/usr/local/bin/sync.sh",
|
||||||
|
"[Install]",
|
||||||
|
"WantedBy=multi-user.target"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "/usr/local/bin/sync.sh",
|
||||||
|
"append": false,
|
||||||
|
"lines": [
|
||||||
|
"#!/bin/bash",
|
||||||
|
"# regular sync to prevent data loss when direct power outage",
|
||||||
|
"while [ 1 ]; do",
|
||||||
|
" sync",
|
||||||
|
" sleep 60",
|
||||||
|
"done"
|
||||||
|
],
|
||||||
|
"chmod": "+x"
|
||||||
|
},
|
||||||
|
{ "chroot": "systemctl enable NetworkManager ntpdate sshd prepare_shutdown sync" },
|
||||||
{ "sudo": "sed -i -E 's/^# (%wheel ALL)/\\1/' ./etc/sudoers" },
|
{ "sudo": "sed -i -E 's/^# (%wheel ALL)/\\1/' ./etc/sudoers" },
|
||||||
{ "sudo": "sed -i -E 's/^#(\\S+MaxUse)=$/\\1=10M/' ./etc/systemd/journald.conf" },
|
{ "sudo": "sed -i -E 's/^#(\\S+MaxUse)=$/\\1=10M/' ./etc/systemd/journald.conf" },
|
||||||
{ "sudo": "sed -i -E 's/^#(\\S+MaxFileSize)=$/\\1=10M/' ./etc/systemd/journald.conf" },
|
{ "sudo": "sed -i -E 's/^#(\\S+MaxFileSize)=$/\\1=10M/' ./etc/systemd/journald.conf" },
|
||||||
{ "copy": [ "%{ROOT_DIR}%/files/firmware/usr", "."] },
|
{ "copy": [ "%{ROOT_DIR}%/files/firmware/usr", "."] },
|
||||||
{ "sudo": "chmod u+s ./usr/bin/Xorg" },
|
{ "sudo": "chmod u+s ./usr/bin/Xorg" },
|
||||||
{ "sudo": "ln -sf /usr/share/zoneinfo/Europe/Warsaw ./etc/localtime" },
|
{ "sudo": "ln -sf /usr/share/zoneinfo/%{TIME_ZONE}% ./etc/localtime" },
|
||||||
{ "chroot": "useradd -m -G wheel,video,audio,disk,usb %{USER_LOGIN}% --password %{USER_LOGIN}%" },
|
{ "chroot": "useradd -m -G wheel,video,audio,disk,usb -g %{USER_ID}% -u %{USER_ID}% %{USER_LOGIN}% --password %{USER_LOGIN}%" },
|
||||||
{ "chroot": "echo '%{USER_LOGIN}%:%{USER_LOGIN}%' | chpasswd" },
|
{ "chroot": "echo '%{USER_LOGIN}%:%{USER_LOGIN}%' | chpasswd" },
|
||||||
{ "chroot": "echo 'root:root' | chpasswd" },
|
{ "chroot": "echo 'root:root' | chpasswd" },
|
||||||
{ "chroot": "sudo -i -u klipper python -m venv /home/%{USER_LOGIN}%/venv" },
|
{ "chroot": "sudo -i -u %{USER_LOGIN}% python -m venv /home/%{USER_LOGIN}%/venv" },
|
||||||
{ "soft_clean": "bdeps" }
|
{ "soft_clean": "bdeps" }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -71,48 +71,43 @@ done
|
|||||||
# [ ! -d "${i}" ] && run mkdir -p "${i}"
|
# [ ! -d "${i}" ] && run mkdir -p "${i}"
|
||||||
#done
|
#done
|
||||||
run mount -t squashfs -o loop,ro "${CDROOT_PATH}/${LOOP}" "${STATIC}" || run_emergency_shell
|
run mount -t squashfs -o loop,ro "${CDROOT_PATH}/${LOOP}" "${STATIC}" || run_emergency_shell
|
||||||
#if [ -d ${CDROOT_PATH}/modules ]
|
if [ -d ${CDROOT_PATH}/modules ]
|
||||||
#then
|
then
|
||||||
# warn_msg "Adding all modules in ${CDROOT_PATH}/modules"
|
warn_msg "Adding all modules in ${CDROOT_PATH}/modules"
|
||||||
# for module in "${CDROOT_PATH}/modules/"*.lzm; do
|
for module in "${CDROOT_PATH}/modules/"*.lzm; do
|
||||||
# mod=${module##*/}
|
mod=${module##*/}
|
||||||
# mod=${mod//-/_}
|
mod=${mod//-/_}
|
||||||
# mod=${mod%.*}
|
mod=${mod%.*}
|
||||||
# if [ ! -d "${OVERLAY}/.${mod}" ]
|
if [ ! -d "${OVERLAY}/.${mod}" ]
|
||||||
# then
|
then
|
||||||
# run mkdir -p "${OVERLAY}/.${mod}" || return
|
run mkdir -p "${OVERLAY}/.${mod}" || return
|
||||||
# fi
|
fi
|
||||||
# run mount -o loop,ro "${module}" "${OVERLAY}/.${mod}"
|
run mount -o loop,ro "${module}" "${OVERLAY}/.${mod}"
|
||||||
# mod_path="${mod_path}:${OVERLAY}/.${mod}"
|
mod_path="${mod_path}:${OVERLAY}/.${mod}"
|
||||||
# # Assign variable with paths to modules mount point
|
# Assign variable with paths to modules mount point
|
||||||
# # TODO: Stop using eval
|
# TODO: Stop using eval
|
||||||
# eval ${mod}="${OVERLAY}/.${mod}"
|
eval ${mod}="${OVERLAY}/.${mod}"
|
||||||
# mods="${mods} ${mod}"
|
mods="${mods} ${mod}"
|
||||||
# done
|
done
|
||||||
#fi
|
fi
|
||||||
run mount -t overlay overlay -o lowerdir="${STATIC}${mod_path}",upperdir="${upperdir}",workdir="${workdir}" "${NEW_ROOT}" || run_emergency_shell
|
run mount -t overlay overlay -o lowerdir="${STATIC}${mod_path}",upperdir="${upperdir}",workdir="${workdir}" "${NEW_ROOT}" || run_emergency_shell
|
||||||
for i in "${RW_MNT}" "${STATIC}" "${CDROOT_PATH}"
|
for i in "${RW_MNT}" "${STATIC}" "${CDROOT_PATH}"
|
||||||
do
|
do
|
||||||
[ ! -d "${NEW_ROOT}${i}" ] && run mkdir -p "${NEW_ROOT}${i}"
|
[ ! -d "${NEW_ROOT}${i}" ] && run mkdir -p "${NEW_ROOT}${i}"
|
||||||
|
run mount --move "${i}" "${NEW_ROOT}${i}" || run_emergency_shell
|
||||||
done
|
done
|
||||||
#echo "overlay / overlay defaults 0 0" > "${NEW_ROOT}"/etc/fstab
|
|
||||||
#run mkdir -p "${NEW_ROOT}${OVERLAY}"
|
#run mount --move "${CDROOT_PATH}" "${NEW_ROOT}${CDROOT_PATH}" || run_emergency_shell
|
||||||
#run chmod 755 "${NEW_ROOT}${OVERLAY}"
|
#run mount --move "${RW_MNT}" "${NEW_ROOT}${RW_MNT}" || run_emergency_shell
|
||||||
#run mount --bind "${OVERLAY}" "${NEW_ROOT}${OVERLAY}"
|
#run mount --move "${STATIC}" "${NEW_ROOT}${STATIC}" || run_emergency_shell
|
||||||
#run mount --bind "${STATIC}" "${NEW_ROOT}${STATIC}"
|
if [ -n "${mods}" ]
|
||||||
#if [ -n "${mods}" ]
|
then
|
||||||
#then
|
for i in ${mods}
|
||||||
# for i in ${mods}
|
do
|
||||||
# do
|
[ ! -d "${NEW_ROOT}${OVERLAY}/.${i}" ] && run mkdir -p "${NEW_ROOT}${OVERLAY}/.${i}"
|
||||||
# run mount --bind "${OVERLAY}/.${i}" "${NEW_ROOT}/${OVERLAY}/.${i}"
|
run mount --bind "${OVERLAY}/.${i}" "${NEW_ROOT}/${OVERLAY}/.${i}"
|
||||||
# done
|
done
|
||||||
#fi
|
fi
|
||||||
#[ ! -d "${NEW_ROOT}${CDROOT_PATH}" ] && mkdir -p "${NEW_ROOT}${CDROOT_PATH}"
|
|
||||||
#run mount --bind "${CDROOT_PATH}" "${NEW_ROOT}${CDROOT_PATH}"
|
|
||||||
#run mount --bind "${RW_MNT}" "${NEW_ROOT}${RW_MNT}"
|
|
||||||
run mount --move "${CDROOT_PATH}" "${NEW_ROOT}${CDROOT_PATH}" || run_emergency_shell
|
|
||||||
run mount --move "${RW_MNT}" "${NEW_ROOT}${RW_MNT}" || run_emergency_shell
|
|
||||||
run mount --move "${STATIC}" "${NEW_ROOT}${STATIC}" || run_emergency_shell
|
|
||||||
|
|
||||||
#for m in ${MODULES}; do
|
#for m in ${MODULES}; do
|
||||||
# run insmod "${NEW_ROOT}${m}"
|
# run insmod "${NEW_ROOT}${m}"
|
||||||
|
@ -92,6 +92,9 @@ class OS:
|
|||||||
cmd += f" | sudo tee {is_append} {self.root_dir}{path} > /dev/null"
|
cmd += f" | sudo tee {is_append} {self.root_dir}{path} > /dev/null"
|
||||||
Logger.os(f"\tCreate file {path}...")
|
Logger.os(f"\tCreate file {path}...")
|
||||||
self.__sudo(cmd, shell=True, cwd=dir)
|
self.__sudo(cmd, shell=True, cwd=dir)
|
||||||
|
if ("chmod" in step):
|
||||||
|
mode = step["chmod"]
|
||||||
|
self.__sudo(f"chmod {mode} {dir}{path}", shell=True, cwd=dir)
|
||||||
if ("chroot" in step):
|
if ("chroot" in step):
|
||||||
cmd = self.board.parse_variables(step["chroot"])
|
cmd = self.board.parse_variables(step["chroot"])
|
||||||
self.__chroot(cmd, dir=dir)
|
self.__chroot(cmd, dir=dir)
|
||||||
@ -239,8 +242,20 @@ class OS:
|
|||||||
def __finalize(self, dir):
|
def __finalize(self, dir):
|
||||||
self.__stage3_steps(self.finalize, "Finalize system installation...", dir=dir)
|
self.__stage3_steps(self.finalize, "Finalize system installation...", dir=dir)
|
||||||
|
|
||||||
|
def make_sqh_kmod(self):
|
||||||
|
mod_path = f"{ROOT_DIR}/out/modules"
|
||||||
|
os.makedirs(mod_path, exist_ok=True)
|
||||||
|
kmod_fn = self.board.parse_variables("%{out_dir}%/kmods/usr/lib/modules")
|
||||||
|
kmod = Path(kmod_fn)
|
||||||
|
for f in kmod.iterdir():
|
||||||
|
sqh_name = f.name
|
||||||
|
self.__make_sqh(f"{kmod_fn}/../../..", f"{mod_path}/{sqh_name}.lzm")
|
||||||
|
break
|
||||||
|
|
||||||
def sqh(self):
|
def sqh(self):
|
||||||
self.__relaunch_as_sudo()
|
self.__relaunch_as_sudo()
|
||||||
|
self.make_sqh_kmod()
|
||||||
|
exit(0)
|
||||||
date = datetime.datetime.today().strftime('%Y_%m_%d')
|
date = datetime.datetime.today().strftime('%Y_%m_%d')
|
||||||
temp_dir = f"{ROOT_DIR}/build/tmp"
|
temp_dir = f"{ROOT_DIR}/build/tmp"
|
||||||
# pack full system via tar
|
# pack full system via tar
|
||||||
@ -410,6 +425,7 @@ class OS:
|
|||||||
self.__copy_file(f"{self.board.out_sh}/uInitrd", f"{out_dir}/")
|
self.__copy_file(f"{self.board.out_sh}/uInitrd", f"{out_dir}/")
|
||||||
Logger.install(f"\tCopy root.sqh")
|
Logger.install(f"\tCopy root.sqh")
|
||||||
self.__sudo(["cp", "-H", f"{self.board.out_sh}/root.sqh", f"{out_dir}/"])
|
self.__sudo(["cp", "-H", f"{self.board.out_sh}/root.sqh", f"{out_dir}/"])
|
||||||
|
self.__sudo(["cp", "-H", f"{self.board.out_sh}/modules", f"{out_dir}/"])
|
||||||
|
|
||||||
def __install_rw(self, out_dir):
|
def __install_rw(self, out_dir):
|
||||||
self.__sudo(["touch", f"{out_dir}/rw_part"], stdout=subprocess.DEVNULL)
|
self.__sudo(["touch", f"{out_dir}/rw_part"], stdout=subprocess.DEVNULL)
|
||||||
|
@ -264,8 +264,15 @@ class Sources:
|
|||||||
# copy new configurtion, if exists
|
# copy new configurtion, if exists
|
||||||
shutil.copyfile(work_cfg_name, cfg_name)
|
shutil.copyfile(work_cfg_name, cfg_name)
|
||||||
|
|
||||||
|
def prepare_artifacts(self, artifacts, out_dir):
|
||||||
|
for art in artifacts:
|
||||||
|
if ("kmods" in art):
|
||||||
|
shutil.rmtree(f"{out_dir}/kmods")
|
||||||
|
|
||||||
def copy_artifacts(self, artifacts, out_dir):
|
def copy_artifacts(self, artifacts, out_dir):
|
||||||
for art in artifacts:
|
for art in artifacts:
|
||||||
|
if ("kmods" in art):
|
||||||
|
continue
|
||||||
file_name = self.work_dir + "/" + art["file"]
|
file_name = self.work_dir + "/" + art["file"]
|
||||||
if ("subdir" in art):
|
if ("subdir" in art):
|
||||||
dir_o = out_dir + "/" + art["subdir"] + "/"
|
dir_o = out_dir + "/" + art["subdir"] + "/"
|
||||||
|
@ -72,6 +72,7 @@ class Target:
|
|||||||
|
|
||||||
def build(self, sub_target, out_dir):
|
def build(self, sub_target, out_dir):
|
||||||
self.source_sync()
|
self.source_sync()
|
||||||
|
self.sources.prepare_artifacts(self.artifacts, out_dir)
|
||||||
if (not self.no_build):
|
if (not self.no_build):
|
||||||
opts = self.makeopts.split(" ")
|
opts = self.makeopts.split(" ")
|
||||||
config = ""
|
config = ""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user