| Summary: | New macros | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | evseev <evseev> |
| Component: | kernel-build-tools | Assignee: | Sergey Vlasov <vsu> |
| Status: | CLOSED NOTABUG | QA Contact: | qa-sisyphus |
| Severity: | enhancement | ||
| Priority: | P2 | CC: | boyarsh, glebfm, kernelbot, ldv, mike, rider, sbolshakov, shrek, sin, vitty, vsu, vt, zerg |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
Нет, так дело не пойдёт. Модули для ядра должны собираться отдельно от userspace-части - хотя бы потому, что при обновлении ядра необходимо пересобирать и модули, и для автоматизации этого процесса шаблон spec для пакета с модулями должен лежать в kernel CVS. В качестве образца можно посмотреть пакеты lm_sensors, fglrx_glx - там при сборке пакета с userspace-частью дополнительно собирается соответствующий пакет kernel-source-%module_name, содержащий исходники для сборки модулей ядра. Затем этот собранный пакет используется при сборке пакетов kernel-modules-%module_name-%flavour (для каждого варианта ядра собирается свой пакет). Пакет mpio в таком виде никуда не годится. Модуль, кстати, содержит множество ошибок, и к тому же его вообще не следовало писать - для такого обмена с устройством предназначена usbfs и использующая её библиотека libusb. |
По мотивам опакечивания mpio, который включает в себя ядерный модуль, //me пришёл к двум выводам: 1) внутри спека надо знать версию ядра, чтобы делать к ней привязку пакета с модулем; 2) при определении версии надо ориентироваться не на `uname -r`, а на /usr/include/linux/version.h, в том числе переучивать configure. Предлагаемые макросы для /etc/rpm/macros.d/kernel: %define kernel_version %(grep UTS_RELEASE %kinclude/version.h | awk '{print $3}' | tr -d '"') %define kernel_base_version %(A=%kernel_version; echo ${A%%%%-*}) %define kernel_release %(A=%kernel_version; echo ${A##*-}) %define kernel_flavour %(A=%kernel_version; B=${A#*-}; echo ${B%%-*}) %define kernel_modules_basedir /lib/modules/%kernel_version # за правильность регулярного выражения не ручаюсь, но его смысл, надеюсь, понятен.. %define patch_detect_kernel_version subst 's,(`uname -r`)|($\(uname -r\)),% kernel_version,g' %define kernel_module_basename kernel-modules-%name %define kernel_module_name %kernel_module_basename-%kernel_flavour %define kernel_module_provides %kernel_module_basename-%kernel_version Пример применения можно посмотреть в mpio.spec Steps to Reproduce: x Actual Results: x Expected Results: x