Перейти к содержанию
    

Идеи обрезки ядра на основе системы Linux T507

Цель обрезки

У клиентов иногда есть определенные требования ко времени загрузки после включения, поэтому необходимо адаптировать ядро, чтобы оптимизировать время загрузки и сократить его. Низкое энергопотребление системы.

Краткое введение в файлы Makefile, Kconfig и файлы .config

  • Makefile: файл в текстовой форме, который компилирует исходные файлы.
  • Kconfig: текстовый файл меню конфигурации ядра.
  • .config: конфигурация, в которой скомпилировано ядро.
  • Файлы Kconfig и Makefile обычно присутствуют в структуре каталогов ядра Linux.
  • Распространяется на всех уровнях каталога.
  • Kconfig представляет собой распределенную базу данных конфигураций ядра, где каждый Kconfig описывает ядро, связанное с исходными файлами каталога, к которому оно принадлежит.
  • Меню конфигурации. Считайте меню конфигурации из Kconfig, когда ядро графически настраивает make menuconfig, и сохраните его в.config после того, как пользователь завершит настройку.
  • Когда ядро скомпилировано, основной Makefile вызывает this.config, чтобы узнать, как пользователь настроил ядро.

Введение в синтаксис Makefile и Kconfig

● Make-файл

Подкаталог Makefile содержится в Makefile верхнего уровня. Он используется для определения того, что компилируется как модуль, а что компилируется условно.

(1) Прямая компиляция obj-y +=xxx.o

Это означает, что xxx.o компилируется из xxx.c или xxx.s и компилируется непосредственно в ядро.

(2) Условная компиляция obj-$(CONFIG_HELLO) +=xxx.o

CONFIG_XXX файла .config определяет, скомпилирован ли файл в ядро или нет.

(3) Компиляция модуля obj-m +=xxx.o

Это означает, что xxx компилируется как модуль, т.е. он компилируется при выполнении модуля make.

 

f_9c11455fea765ce05fb52f399f5d8fd4&t=png

● Кконфиг

Каждый пункт меню конфигурации имеет определение типа. bool: логический тип, tristate: три состояния (встроенный, модуль, удаление), string: последовательность символов, hex: шестнадцатеричный, целое число: целое число

Функция: определение пункта меню, отображаемого при создании меню конфигурации.

f_222294e4329b669b3c9e140aad53e6f1&t=png

f_ee88668a9368215b965489cf682677e5&t=png

1) НОВЫЕ _ светодиоды: название опции конфигурации. Префикс «CONFIG _» «опущен.

2) tristate: указывает, запрограммирован ли элемент в ядро или в модуль. Отображается как < >, если выбрана компиляция в качестве модуля ядра, будет сгенерирована конфигурация CONFIG_HELLO_MODULE=m в .config. Выбор Y приведет к прямой компиляции в ядро с созданием конфигурации CONFIG_HELLO_MODULE=y в .config.

3) bool: этот тип можно только отметить или снять. При настройке меню он отображается как [ ], то есть его нельзя настроить как модуль.

4) зависимость: эта опция зависит от другой опции, только если зависимость отмечена, появится сообщение с подсказкой текущего элемента конфигурации для установки текущего элемента конфигурации.

5) select: обратная зависимость: если этот параметр отмечен, элемент, определенный после выбора, также проверяется.

6) помощь: справочная информация.

tristate и bool, за которыми следуют строки, — это имена элементов конфигурации, отображаемые в make menuconfig.

Определения в Kconfig, такие как «menuconfig NEW_LEDS» или «меню «Поддержка видео для Sunxi»», обычно представляют собой каталоги верхнего уровня каталога, где в менюconfig вы можете напрямую обрезать соответствующий драйвер, выполнив поиск этого элемента конфигурации.

Итерация иерархии каталога:

В Kconfig есть такие операторы, как «source «drivers/usb/Kconfig»», используемые для включения (или вложения) новых файлов Kconfig, что позволяет каждому каталогу управлять своим собственным содержимым конфигурации без необходимости записи всех этих конфигураций в один и тот же файл, что делает его легче модифицировать и управлять.

Частично управляемый пошив

1. Идеи пошива

Если взять в качестве примера функцию GPADC, расположение драйвера в ядре исходного кода:drivers/input/sensor/sunxi_gpadc.c,

Таким образом, мы можем перейти к файлу Kconfig по этому пути и напрямую выполнить поиск «меню» в файле Kconfig, который обычно соответствует каталогу верхнего уровня этого драйвера.

f_7b4fac2d71dfe58c6a53b9f494a567ee&t=png

Мы видим, что опция конфигурации называется INPUT_SENSOR, что соответствует названию «Датчики» в менюconfig. После этого мы можем напрямую найти этот параметр конфигурации в менюconfig. Выполните команду make menuconfig по пути к ядру.

ARCH=arm64 Войдите в графический интерфейс конфигурации:

f_13ea3e1e86a6e802fda247b406045dde&t=png

На этом экране введите /, затем INPUT_SENSOR и нажмите Enter.

f_5b14aa9ee37246b7910f21d642e9b42e&t=png

f_79e9f9d04dbeaa7220ad6c03b2357966&t=png

Как показано на рисунке, этот элемент настраивается в разделе «Драйверы устройств ---> Путь поддержки устройств ввода» и «Общий».

Для параметра конфигурации «входной слой (необходим для клавиатуры, мыши и т. д.)» установлено значение «y» (да).

f_46be819a0bd29ab6a2669950bc6180c4&t=png

Отмените настройку датчиков, затем сохраните ее и выйдите в виде файла .config. После этого вернитесь к пути OKT507-linux-sdk, скомпилируйте ядро отдельно, а затем упакуйте образ.

forlinx@ubuntu:~/work/OKT507-linux-sdk$ ./build.sh ядро

forlinx@ubuntu:~/work/OKT507-linux-sdk$ ./build.sh пакет

2. Частичный путь проезда

 

Устройство

Расположение драйвера в исходном ядре

Имя устройства

Путь в Menuconfig

Wi-Fi

Wi-Fi

wlan0

Драйверы устройств --->

Удалить: Поддержка сетевых устройств.

Сетевая карта

драйверы/сеть/ethernet/allwinner/

/sys/класс/сеть/эт*

HDMI

драйверы/видео/fbdev/sunxi/disp2/hdmi2/

/dev/fb1

Драйверы устройств ---> Поддержка графики ---> Устройства с буфером кадров ---> Поддержка видео для sunxi ---> Удалить: Поддержка драйвера HDMI2.0 (sunxi-disp2) (еще не полностью изменено)

Usb-U диск

драйверы/USB/хранилище/

/dev/sdx

Драйверы устройств ---> Поддержка USB ---> Удалить: поддержка USB-накопителей

USB-4G

драйверы/USB/последовательный/

/dev/ttyUSB*

Драйверы устройств ---> Поддержка USB ---> Удалить: Поддержка последовательного преобразователя USB

USB-камера

драйверы/медиа/usb/uvc/uvc_video.c

 

Драйверы устройств ---> Поддержка мультимедиа ---> Мультимедийные USB-адаптеры ---> Удалить: Класс USB-видео (UVC)

USB-камера

драйверы/медиа/usb/uvc/uvc_video.c

 

Драйверы устройств ---> Поддержка мультимедиа ---> Мультимедийные USB-адаптеры ---> Удалить: Класс USB-видео (UVC)

Сторожевая собака

драйверы/сторожевой таймер/sunxi_wdt.c

/dev/сторожевой пес

Драйверы устройств ---> Удалить: Поддержка сторожевого таймера

Bluetooth

драйверы/блютуз/

 

Поддержка сети ---> Поддержка подсистемы Bluetooth ---> Драйверы устройств Bluetooth ---> Снимите все флажки (не забудьте записать исходную конфигурацию)

Аудио

звук/соц/суньси

/дев/снд/

Драйверы устройств ---> Поддержка звуковой карты ---> Расширенная звуковая архитектура Linux ---> Поддержка звука ALSA для SoC ---> Поддержка звука Allwinner SoC ---> Снимите все флажки (не забудьте записать исходную конфигурацию)

ШИМ

драйверы/pwm/pwm-sunxi.c

/sys/класс/ШИМ/

Драйверы устройств ---> Удалить: Поддержка широтно-импульсной модуляции (ШИМ)

OV5640_ДВП

драйверы/медиа/платформа/sunxivin/модули/сенсор/ov5640.c

/dev/видео*

Драйверы устройств ---> Поддержка мультимедиа ---> Устройства платформы V4L ---> Удалить: драйвер видеовхода sunxi (камера csi/mipi isp vipp)Открыть OKT507-linux-sdk/kernel/linux-4.9/drivers/media/platform /Makefile, закомментируйте obj-y +=

OV5640_МИПИ

драйверы/медиа/платформа/sunxivin/модули/сенсор/ov5640_mipi.c

ТП2854М

драйверы/медиа/платформа/sunxivin/модули/сенсор/tp2854_mipi.c

 

 

 

sunxi_car_reverse/

 

 

 

Устройство

Расположение драйвера в исходном ядре

Путь в Menuconfig

Имя устройства

GT911 сенсорный

драйверы/вход/сенсорный экран/gt911.c

Драйверы устройств ---> Поддержка устройств ввода ---> Сенсорные экраны ---> Удалить: сенсорный экран Goodix I2C gt911, сенсорный экран Goodix I2C gt928, сенсорные экраны на базе TSC2007

/dev/input/event*Просмотр события с соответствующим именем evtest, например: Соответствующее имя GPADC — sunxi-gpadc0sunxi-gpadc1sunxi-gpadc2sunxi-gpadc3.

GT928 сенсорный

драйверы/вход/сенсорный экран/gt928.c

TSC2007 сенсорный

драйверы/вход/сенсорный экран/tsc2007.c

ЛРАДК

драйверы/вход/клавиатура/sunxi-keyboard.c

драйверы/вход/клавиатура/sunxi-keyboard.c

ГПАДК

драйверы/вход/датчик/sunxi_gpadc.c

Драйверы устройств ---> Поддержка устройств вводаУдалить: Датчики

ИК

драйверы/media/rc/sunxi-ir-dev.c

Драйверы устройств ---> Поддержка мультимедиа Удалить: Декодеры пульта дистанционного управления、Устройства пульта дистанционного управления

РТК

драйверы/rtc/rtc-rx8010.c

Драйверы устройств ---> Удалить: Часы реального времени

/dev/rtc0

 

Выше приведена обрезка одного из драйверов, остальные функции можно урезать указанными ранее способами.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...