Я использую linux3.3, и недавно при создании busybox для новой команды обнаружил, что добавленный исходный файл busybox использует заголовки ядра Linux.

Итак, я поискал в Интернете и сделал «make headers_install ARCH = .. CROSS_COMPILE = .. INSTALL_HDR_PATH = ..», чтобы извлечь заголовки, которые можно использовать для программы пользовательского пространства.

Затем я использовал новые файлы заголовков вместо файлов в sparc-snake-linux / sys-include.

Но мне пришлось скопировать некоторые недостающие файлы из sys-include в новые каталоги заголовков и скопировать некоторые недостающие определения из файлов sys-include в соответствующий файл в новых файлах заголовков. (Где-то в Интернете я читал это 'make headers_install' не был обновлен после linux2.6 или около того)

Это то, что я должен делать? (Почему отсутствуют какие-то файлы? Я думаю, это потому, что make headers_install не поддерживается и не работает для версий позже, чем 2.6? Я прав?)

Используя этот метод, я удалил десятки «неопределенных» ошибок, но теперь я вижу конфликт определений между файлами из sparc-snake-linux / sys-include (конечно, новая очищенная и улучшенная версия) и sparc-snake-linux / включают. Какую версию использовать?

И если мне удастся выполнить компиляцию (исправив проблемы с заголовками), нужно ли мне заново собирать glibc с этими новыми заголовочными файлами? (Боюсь, это так. Я использую glibc для busybox)

Любая помощь будет очень признательна.

Благодарность

Чан

ДОБАВИТЬ: Я извлек новые файлы заголовков, используя указанную выше команду, и построил busybox с новой добавленной командой (маршрут и другие функции, связанные с IP). Он работает нормально, и причина, по которой это не сработало, заключалась в том, что у меня была определена переменная KERNEL для busybox, чего не следует делать (потому что busybox - это не код ядра, а программа пользователя).

0
Chan Kim 20 Авг 2014 в 16:17
В kernelnewbies.org/KernelHeaders говорится: «правильный способ упаковки файлов заголовков для дистрибутива - запустить 'make headers_install' из исходного каталога ядра, чтобы установить заголовки в / usr / include, а затем перестроить пакет библиотеки C в зависимости от конкретной версии только что установленных заголовков ядра. пакет библиотеки.
 – 
Chan Kim
21 Авг 2014 в 08:38

1 ответ

Лучший ответ

Я извлек новые файлы заголовков, используя указанную выше команду, и построил busybox с новой добавленной командой (маршрут и другие функции, связанные с IP). Он работает нормально, и причина, по которой это не сработало, заключалась в том, что я на какое-то время по глупости определил переменную _KERNEL_ для busybox, чего не следует делать (потому что busybox - это не код ядра, а пользовательская программа).
когда вы используете
эхо "" | Arch-abc-linux-gcc -o /tmp/tmp.o -v -x c -
вы можете увидеть стандартный путь включения. Если кросс-компилятор предназначен для компиляции приложения в Linux (например, приведенного выше), он будет иметь путь к системному заголовку linux в стандартном пути включения. Замените это новым извлеченным путем заголовка. Я использовал параметр -nostdinc и явно указал путь включения.

0
Chan Kim 26 Авг 2014 в 04:25