LINUX.ORG.RU

Gentoo создать пакет с модулем ядра

 ,


0

1

Мне нужно создать пакет с модулем ядра, ядро при этом будет потом обновляться. Например - пришло обновление ядра - модуль пересобрался. В других дистрах это делается через dkms. Проблем с dkms как минимум две —

  1. Оно не поддерживается дистрибутивом
  2. Даже если установить dkms, я не знаю, есть ли в генте аналог арчевских post-transaction hooks, вручную запускать dkms build не вариант.

В генте есть же nvidia-drivers, например. Пробовал заглядывать в ебилд, но ничего там не понял.

★★☆

Можешь взять за основу мой старый ебилд и обновить/подправить:

# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

inherit linux-info eutils linux-mod git-r3

DESCRIPTION="Linux ASUS WMI Sensor driver for Ryzen motherboards."
HOMEPAGE="https://github.com/electrified/asus-wmi-sensors"
EGIT_REPO_URI="https://github.com/electrified/asus-wmi-sensors.git"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"

DEPEND="virtual/linux-sources"
RDEPEND=""

BUILD_TARGETS="all"
BUILD_TARGET_ARCH="${ARCH}"
MODULE_NAMES="asus-wmi-sensors(drivers/hwmon:${S})"

S="${WORKDIR}"

pkg_setup()
{
	CONFIG_CHECK="ACPI_WMI"
	ERROR_ACPI_WMI="ACPI_WMI: Please enable it. If you can't find it, look at 'Device Drivers -> X86 Platform Specific Device Drivers'."

	linux-mod_pkg_setup
}

src_install()
{
	linux-mod_src_install
	insinto /etc/modules-load.d/
	doins "${FILESDIR}/asus-wmi-sensors.conf"
}

pkg_postinst()
{
	linux-mod_pkg_postinst
}
Meyer ★★★★★
()
Ответ на: комментарий от Meyer

Спасибо, учту. Я правильно понимаю, что использование еклассов linux-mod и linux-mod-r1 позволяет собрать модуль ядра, который будет пересобираться под новые ядра?

Werenter ★★☆
() автор топика

Посмотри как устроена сборка пакетов для модулей wifi, например, которых нет в ядре.

Да, при обновлении ядра, как отметили, нужно просто ещё раз пересмотреть этот пакет, содержащий модуль.

grem ★★★★★
()

Модуль собрал, спасибо всем ответившим. Кому интересно или полезно, вот ебилд:

EAPI=8

inherit linux-mod-r1 git-r3

DESCRIPTION="Driver for Realtek rts5139 USB cardreader"
HOMEPAGE="https://realtek.com"
EGIT_REPO_URI="https://github.com/ljmf00/rts5139"
EGIT_COMMIT="ed6fe53"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64"

DEPEND="virtual/linux-sources"
BDEPEND=""

pkg_setup() {
	linux-mod-r1_pkg_setup
	export KERNELRELEASE=${KV_FULL}
}

src_compile() {
	local modlist=(
		rts5139=drivers/scsi
	)
	linux-mod-r1_src_compile
}

src_install() {
	dodir /etc/modprobe.d/
	dodir /etc/dracut.conf.d/
	cp "${S}/blacklist-rts5139.conf" "${D}/etc/modprobe.d/" || die "Install failed!"
	cp "${FILESDIR}/blacklist_rtsx.conf" "${D}/etc/dracut.conf.d/" || die "Install failed!"
	linux-mod-r1_src_install
}

pkg_postinst() {
	dracut --force
}

Кстати, есть ли более красивый способ избавиться от нерабочего драйвера rtsx_usb из основного дерева ядра, кроме как явный блеклист в initramfs и modprobe?

Werenter ★★☆
() автор топика
Последнее исправление: Werenter (всего исправлений: 1)
Ответ на: комментарий от Meyer

Спасибо, всё получилось. А как можно избавиться от конфликтующего драйвера из основного дерева ядра более красиво, чем вручную выпиливать модуль из initrd и блеклистить в /etc/modprobe.d?

Werenter ★★☆
() автор топика
Последнее исправление: Werenter (всего исправлений: 1)