Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Окружение и инструменты | Вперед |
О сборке модулей детальнее
Далее рассмотрим некоторые особенности процедуры сборки ( make ) проектов, и нарисуем несколько сценариев сборки ( Makefile ) для наиболее часто востребованных случаев, как например: сборка нескольких модулей в проекте, сборка модуля объединением нескольких файлов исходных кодов и подобные.
Параметры компиляции
Параметры компиляции модуля можно существенно менять, изменяя переменные, определённые в скрипте, осуществляющем сборку, например:
EXTRA_CFLAGS += -O3 -std=gnu89 —no-warnings
Таким же образом дополняем определения нужных нам препроцессорных переменных, специфических для сборки нашего модуля:
Как создать свою сборку Windows 7 — 11, без сторонних программ, патчей с помощью стандартных средств
EXTRA_CFLAGS += -D EXPORT_SYMTAB -D DRV_DEBUG
Примечание: Откуда берутся переменные, не описанные по тексту файлу Makefile , как, например, EXTRA_CFLAGS ? Или откуда берутся правила сборки по умолчанию (как в примере примере использования ассемблерного кода разделом ранее)? И как посмотреть эти правила? Всё это вытекает из правил работы утилиты make : в конце книги отдельным приложением приведена краткая справка по этим вопросам, там же приведена ссылка на детальное описание утилиты make .
Как собрать одновременно несколько модулей?
В уже привычного нам вида Makefile может быть описано сборка скольки угодно одновременно собираемых модулей (архив export.tgz ):
. TARGET1 = md1 TARGET2 = md2 obj-m := $(TARGET1).o $(TARGET2).o .
Как собрать модуль и использующие программы к нему?
Часто нужно собрать модуль и одновременно некоторое число пользовательских программ, используемых одновременно с модулем (тесты, утилиты, . ). Зачастую модуль и пользовательские программы используют общие файлы определений (заголовочные файлы). Вот фрагмент подобного Makefile — в одном рабочем каталоге собирается модуль и все использующие его программы (архив ioctl.tgz ):
. TARGET = hello_dev obj-m := $(TARGET).o all: default ioctl default: $(MAKE) -C $(KDIR) M=$(PWD) modules ioctl: ioctl.h ioctl.c gcc ioctl.c -o ioctl .
Интерес такой совместной сборки состоит в том, что и модуль и пользовательские процессы включают (директивой #include ) одни и те же общие и согласованные определения (пример, в том же архиве ioctl.tgz ):
Такие файлы содержат общие определения:
typedef struct _RETURN_STRING < char buf[ 160 ]; >RETURN_STRING; #define IOCTL_GET_STRING _IOR( IOC_MAGIC, 1, RETURN_STRING )
Некоторую дополнительную неприятность на этом пути составляет то, что при сборке приложений и модулей (использующих совместные определения) используются разные дефаултные каталоги поиска системных ( <. >) файлов определений: /usr/include для процессов, и /lib/modules/`uname -r`/build/include для модулей. Приемлемым решением будет включение в общий включаемый файл фрагмента подобного вида:
#ifndef __KERNEL__ // ————- user space applications #include // это /usr/include/linux/types.h ! #include . #else // ————— kernel modules . #include #include // а это /lib/modules/`uname -r`/build/include/linux/types.h #include . #endif
При всём подобии имён заголовочных файлов (иногда и полном совпадении написания: ), это будут включения заголовков из совсем разных наборов API (API разделяемых библиотек *.so для пространства пользователя, и API ядра — для модулей). Первый (пользовательский) из этих источников будет обновляться, например, при переустановке в системе новой версии компилятора GCC и комплекта соответствующих ему библиотек (в первую очередь libc.so ). Второй (ядерный) из этих источников будет обновляться, например, при обновлении сборки ядра (из репозитария дистрибутива), или при сборке и установке нового ядра из исходных кодов.
Пользовательские библиотеки
В дополнение к набору приложений, обсуждавшихся выше, удобно целый ряд совместно используемых этми приложениями функций собрать в виде единой библиотеки (так устраняется дублирование кода, упрощается внесение изменений, да и вообще улучшается структура проекта). Фрагмент Makefile из архива примеров time.tgz демонстрирует как это записать, не выписывая в явном виде все цели сборки (перечисленные списком в переменной OBJLIST ) для каждого такого объектного файла, включаемого в библиотеку (реализующего отдельную функцию библиотеки). В данном случае мы собираем статическую библиотеку libdiag.a :
Здесь собираются две цели prog и lib , объединённые в одну общую цель all . При желании, статическую библиотеку можно поменять на динамическую (разделяемую), что весьма часто востребовано в реальных крупных проектах. При этом в Makefile требуется внести всего незначительные изменения (все остальные файлы проекта остаются в неизменном виде):
Примечание: В случае построения разделяемой библиотеки необходимо, кроме того, обеспечить размещение вновь созданной библиотеки (в нашем примере это libdiag.so ) на путях, где он будет найдена динамическим загрузчиком, размещение «текущий каталог» для этого случая неприемлем: относительные путевые имена не применяются для поиска динамических библиотек. Решается эта задача: манипулированием с переменными окружения LD_LIBRARY_PATH и LD_RUN_PATH , или с файлом /etc/ld.so.cache (файл /etc/ld.so.conf и команда ldconfig ) . но это уже вопросы системного администрирования, далеко уводящие нас за рамки предмета рассмотрения.
Как собрать модуль из нескольких объектных файлов?
Соберём (архив mobj.tgz ) модуль из основного файла mod.c и 3-х отдельно транслируемых файлов mf1.c, mf2.c, mf3.c , содержащих по одной отдельной функции, экспортируемой модулем (весьма общий случай):
#include #include «mf.h» static int __init init_driver( void ) < return 0; >static void __exit cleanup_driver( void ) <> module_init( init_driver ); module_exit( cleanup_driver );
#include char *mod_func_A( void ) < static char *ststr = __FUNCTION__ ; return ststr; >; EXPORT_SYMBOL( mod_func_A );
Файлы mf2.c, mf3.c полностью подобны mf1.c только имя экспортируемых функций заменены, соответственно, на mod_func_B( void ) и mod_func_C( void ) . Заголовочный файл, включаемый в текст модулей:
extern char *mod_func_A( void ); extern char *mod_func_B( void ); extern char *mod_func_C( void );
Ну и, наконец, в том же каталоге собран второй (тестовый) модуль, который импортирует и вызывает эти три функции как внешние экспортируемые ядром символы:
#include #include «mf.h» static int __init init_driver( void ) < printk( KERN_INFO «start module, export calls: %s + %s + %sn», mod_func_A(), mod_func_B(), mod_func_C() ); return 0; >static void __exit cleanup_driver( void ) <> module_init( init_driver ); module_exit( cleanup_driver );
Самое интересное в этом проекте, это:
— привычные, из предыдущих примеров, всё те же определения переменных — опущены.
Теперь мы можем испытывать то, что мы получили:
$ nm mobj.ko | grep T
00000000 T cleanup_module 00000000 T init_module 00000000 T mod_func_A 00000010 T mod_func_B 00000020 T mod_func_C
$ sudo insmod ./mobj.ko
$ lsmod | grep mobj
$ cat /proc/kallsyms | grep mod_func
. f7f9b000 T mod_func_A [mobj] f7f9b010 T mod_func_B [mobj] .
filename: mcall.ko license: GPL author: Oleg Tsiliuric description: multi jbjects module srcversion: 5F4A941A9E843BDCFEBF95B depends: mobj vermagic: 2.6.32.9-70.fc12.i686.PAE SMP mod_unload 686
$ sudo insmod ./mcall.ko
start module, export calls: mod_func_A + mod_func_B + mod_func_C
И в завершение проверим число ссылок модуля, и попытаемся модули выгрузить:
$ lsmod | grep mobj
mobj 1032 1 mcall
$ sudo rmmod mobj
ERROR: Module mobj is in use by mcall
$ sudo rmmod mcall
$ sudo rmmod mobj
Рекурсивная сборка
Это вопрос, не связанный непосредственно со сборкой модулей, но очень часто возникающий в проектах, оперирующих с модулями: выполнить сборку (одной и той же цели) во всех включаемых каталогах, например, на каких-то этапах развития, архив примеров к книге имел вид:
dev exec int80 netproto pci signal thread tools user_space
dma first_hello IRQ net parms proc sys time usb
Хотелось бы иметь возможность собирать (или очищать от мусора) всю эту иерархию каталогов-примеров. Для такой цели используем, как вариант, такой Makefile :
Интерес здесь представляет строка, формирующая в переменной SUBDIRS список подкаталогов текущего каталога, для каждого из которых потом последовательно выполняется make для той же цели, что и исходный вызов.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Компилятор GCC | Инсталляция модуля |
Источник: rus-linux.net
Тема: Как создать свою сборку в Minecraft.
SaNeR
Просмотр профиля
Сообщения форума
Личное сообщение
Репутация
Руководитель форума
Ваш статус vk.com/surikoz
Сообщений 3,091
Регистрация 10.10.2012
72 Как создать свою сборку в Minecraft?». Ты пришел по адресу, ведь в этой теме я расскажу о 2 простых способах, с помощью которых ты сможешь сделать собственную сборку в Minecraft.
Речь будет идти о Клиентской сборке (не о серверной, о ней как нибудь поговорим позже).
Что такое Клиентская сборка? В моем понимание — это Minecraft определенной версии, с установленными модами.
Для того, чтобы собрать Клиентскую сборку, не нужно обладать какими либо знаниями, достаточно просто знать, как устанавливать моды.
Но перед тем, как вы ознакомитесь с установкой модов, я бы хотел дать парочку советов:
1) Не добавляйте много модов, ведь чем больше модов, тем больше лагов.
2) Определитесь с жанром сборки, так как бездумное добавление разных модов делает из сборки Солянку.
3) Старайтесь оптимизировать сборку (речь веду о модах, которые оптимизируют игру), ведь не у всех мощные компьютеры, и не все смогут установить вашу сборку и играть на ней. Конечно если вы делаете сборку для себя, то оптимизация по желанию.
4) Также следите за версиями модов, некоторые умудряются припаять моды, которые не совместимы с версиями Minecraft. (К примеру: ставят моды, которые предназначены для версию 1.7.10, на версию Minecraft 1.8 / 1.9) Если даже это у вас выйдет, то мод не будет работать корректно, будут проседания FPS.
Жанры сборок.
Спойлер: Жанры сборок:
HiTech (Техническая) сборка — в такой сборке установлены моды на различные механизмы, которые способны автоматизировать игровой процесс. Переработка руды, авто-фермы, карьеры, копательные черепахи, мощная броня на электричестве, мэ системы и прочее. В такие сборки чаще всего добавляют такие моды: IndustrialCraft, BuildCraft, AppliedEnergistics, ThermalExpansion, RailCraft, Forestry, MineFactoryReloaded, ComputerCraft (из-за своих черепах, которые способны делать буквально все), ProjektRed и прочие.
Magic (Магическая) сборка — из названия понятно, что в такой сборке преобладают моды на магию. Магия, сплошная магия. Варка зелий, получений различных аспектов, изучение предметов, в конце концов колдовство. ThaumCraft, ArsMagica, BloodMagic и прочие.
Декор сборка — в такую сборку устанавливают моды на различные декорации, мебель, новые строительные блоки. Постройте дом и украсьте его снаружи, различными украшениями, изнутри мебелью. DecoCraft, Chisel, BiblioCraft, MrCrayfish’s Furniture Mod, Carpenter’s Blocks, FRSM mod и прочие.
Pixelmon сборка — не сказать, что это определенный жанр, но сборки с упором на этот мод встречаются часто. Главный мод — Pixelmon mod, ну и парочка модов, которые дополняют Pixelmon Mod, к примеру Poke Radar.
Военная сборка — да, да, такой жанр тоже существует. Как понятно из названия, в данной сборке весь упор идет на военную тематику. Военная техника, оружия, броня и прочая лабуда, эмитирующая военные события в Minecraft. Flans mod помощник в этом деле.
Солянка — это не жанр, но таким словом называют те сборки, в которых не выдержана тематика. Когда в такие сборки пихают разные моды и потом называют это «ВЕЛИКОЛЕПНОЙ СБОРКОЙ»
Но ни кто вас не заставляет придерживаться определенного жанра, это дело каждого. Если вы делаете сборку для себя, то вам достаточно поставить те моды, к которым у вас лежит душа. Жанры нужны, если вы делаете публичную сборку.
Также вы можете совмещать жанры. Часто совмещают HiTech и Magic.
А теперь я расскажу о 2-х простых способах установки модов (Через TLauncher и Ручная установка)
1 Способ. Установка модов через TLauncher.
Сразу скажу, что я не буду показывать, как устанавливать 30 и более модов, так как установка каждого мода идентична.
На примере установим 2 мода, но перед этим установим TLauncher. Скачать и ознакомится с ним можно тут: ТЫК
Установка лаунчера простая, заострять внимание на этом я не буду. Вы установили лаунчер, запустили его, но что дальше?
У вас откроется такое окно:
Нужно создать аккаунт, жмём на кнопку, где нарисованы ключик и отвертка.
Выбирайте пункт менеджер аккаунтов. Перед вами откроется такое окно:
Жмем на зеленый плюсик[, в строке имя пользователя вписываем свой ник. (Если у вас лицензионный аккаунт, то выбирайте пункт «Пароль на Mojang.com» и вписывайте уже свои данные, то есть логин или электронную почту и пароль лицензионного аккаунта.)
Далее жмём кнопку «Cохранить аккаунт»
После того, как сохранился аккаунт, жмём на кнопку, где изображен домик.
Перед вами снова откроется это окно, но уже с вписанным ником:
Далее выбираем версию игры. В нашем случае это будет Forge 1.7.10
Жмем кнопку Установить. У вас загрузятся все ресурсы игры. После загрузки у вас откроется игра.
Первый этап данного способа выполнен. Преимущество этого лаунчера и версии, которую мы выбрали, в том, что нам не пришлось в ручную устанавливать Minecraft Forge.
После того, как у вас открылась игра, закройте ее. Нам нужно установить моды.
Но прежде чем это сделать, нужно открыть директорию игры. Делается это легко. После того как вы закрыли игру, у вас откроется снова лаунчер. Жмите на кнопку, где изображена папка.
У вас откроется корневая папка игры:
Вот теперь мы переходим к этапу установки модов. Я буду устанавливать 2 мода, это NEI (Not Enough Items) и DecoCraft. Но для начала их нужно скачать. Я не рекомендую скачивать моды с левых сайтов. Скачивайте моды только с официальных сайтов или с сайтов minecraftforum, planetminecraft, Curse.com и с нашего сайта minecraftonly.
На этих сайтах вас точно не обманут, и не подсунут вирус вместо нужного файла.
И скачиваем мод NEI
На этом сайте нужно выбрать версию 1.7.10
В строке Recommended выбираем и скачиваем моды (Жмите universal) CodeChickenCore (Ядро для NEI) и сам NotEnoughItems (NEI)
Далее, скачанные моды, перемещаем в папку mods, после чего, снова запускаем игру.
Как мы видим, у нас установились моды.
Проверим работоспособность модов.
NotEnoughItems работает, отлично =)
DecoCraft тоже работает. Прекрасно =)
Не сложно ведь, правда?
2 Способ. Ручная установка.
Как собрать сборку программ
Всех снова приветствую на данном блоге, и сегодня мне хочется коснуться такого вопроса как создать свою сборку Windows 10. Вы наверняка знаете, что я периодически собираю Windows Server сборки, для себя со всеми обновлениями и выкладываю тут, и многие люди ими успешно пользуются, так как это экономит время на развертывание и обновление. С Windows 10 и ее приходом в наше настоящее, многие хотели бы иметь ее обновленной и собранной под себя. Я вас этому научу.
И так как обновить виндовс 10 я уже рассказывал, процедура это не сложная, но выполняемая каждый месяц в идеале с точки зрения безопасности. Предположим, что через пару месяцев вы засрали ее или она перестала корректно работать, а образа восстановления Windows 10 у вас нет, то вам придется ее переустанавливать. Тоже вроде дело то не сложное, но это время и плюс время на обновление, с кучей перезагрузок и установкой кучу софта. Вот тут вам и поможет создание своей сборки Windows 10, с установленными в нее всеми обновлениями и нужными программами.
Установка ADK Windows 10
Запускаем установщик. Вы увидите привычную картинку с белым чемоданчиком.
Откроется окно выбора расположения, тут два варианта
- Первый это, установите комплект средств для развертывания и оценки Windows — Windows 10 на этот компьютер в нужный вам каталог
- Второй вариант предполагает скачать в нужную папку файлы манифесты, чтобы потом их можно было подложить установщику и не скачивать все заново.
Далее можете принять участие в программе улучшения качества
Теперь соглашаетесь с лицензионным соглашением и жмете Принять.
Выбранные компоненты можете оставить по умолчанию, нам это подходит, но при желании можете снять те что я пометил в списке.
- средства развертывания
- Среда установки Windows (Windows PE)
- Конструктор конфигурации и обработки образов
- Средство миграции USMT (можно не ставить)
- Набор средств для оценки производительности Windows (можно не ставить)
Все компоненты для создания сборки Windows 10 готовы, можно ставить.
Придется подождать чуток, минут этак 15 и ADK установится.
Популярные Похожие записи:
Что такое утилита sysprep, простыми словами
Как скачать Windows 11, за минуту
- Администрирование SCCM (System Center Configuration Manager)
Установка и настройка Hyper-V в Windows 11
Установка и настройка Windows 12
Как установить vSphere PowerCLI последнюю версию
11 Responses to Создаем свою сборку Windows 10. 1 часть
Добрый вечер Иван! У меня есть два вопроса.
1) Где всё-таки уст АДК на РС или ВМ ? Если ВМ то каким образом ?!
2) Сегодня 3 части уже не будет ?
Заранее спасибо за ответ. Извеняюсь за занудство,хотелось быстрее восп.вашими знаниями и получить хороший результат. По инету гуглил никакой стоящей инф-ии не нашёл.
Иван Семин :
Добрый день, ADK ставим на свой компьютер, не на виртуалку.
3 часть думаю только на выходных, трудовые будни еще никто не отменял:)
Источник: pyatilistnik.org