Я работаю над проектом, в котором базовое ядро ​​от QNX, и все источники ядра поступают как двоичные, например, уровень CAM для блочных драйверов представлен как libcam.a, но не смог найти точный двоичный файл ядра, который должен быть там полностью исходное дерево проекта.

Кто-нибудь может сказать мне, как это узнать ??

0
Amit Singh Tomar 17 Фев 2013 в 11:05
all the Kernel sources are coming as binary - Что?
 – 
jweyrich
17 Фев 2013 в 11:07
Да, почти все исходники ядра поставляются в виде двоичных файлов, мы написали несколько оболочек для подключения к этим двоичным файлам, но не уверены, какой из них является двоичным.
 – 
Amit Singh Tomar
17 Фев 2013 в 11:20
Как вы думаете, почему вам нужно заботиться о ядре?
 – 
Ignacio Vazquez-Abrams
17 Фев 2013 в 11:23
Что ж, нам нужно знать из кода загрузчика, как вызывается ядро, а также некоторые другие причины.
 – 
Amit Singh Tomar
17 Фев 2013 в 11:26

1 ответ

Лучший ответ

Работающее ядро ​​будет процессом с PID равным 1. Используйте ps -e, чтобы увидеть его.

В моем случае это procnto. Если вы используете инструментальное ядро ​​(для отладки), это procnto-instr.

 ps -e
       PID TTY          TIME CMD
         1 ?        12:25:42 procnto
      4098 ?        00:00:00 pci-bios
      4099 ?        03:40:47 io-usb
      4100 ?        00:00:00 io-hid
      4101 ?        00:00:00 devc-con-hid
      4102 ?        00:58:14 devb-eide
     20487 ?        00:00:00 /sbin/tinit
     20488 ?        00:00:00 slogger
     24585 ?        00:00:25 pipe
     28682 ?        00:10:22 mqueue

В зависимости от того, как вы создаете файл IFS, у вас может быть файл .build, который включает что-то вроде следующего:

#
# The build file for QNX Neutrino booting on a PC
#
[linker="ntox86-ld -T$QNX_TARGET/x86/lib/nto.link %(h!=0, -Ttext 0x%t%)%(d!=0, -Tdata 0x%d%) -o%o %i %[M -L%^i -uinit_%n -lmod_%n%]"]
[virtual=x86,bios +compress] boot = {
    startup-bios

    # PATH is the *safe* path for executables (confstr(_CS_PATH...))
    # LD_LIBRARY_PATH is the *safe* path for libraries (confstr(_CS_LIBPATH))
    #    i.e. This is the path searched for libs in setuid/setgid executables.
    PATH=/proc/boot:/bin:/usr/bin:/opt/bin LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib procnto

} ...

Последний procnto сообщает загрузчику, какое ядро ​​использовать. Дополнительную информацию см. В mkifs.

1
kmort 6 Мар 2013 в 18:26
Спасибо @Kmort, в любом случае мы нашли наше ядро ​​nto с тем же именем procnto-smp-instr.
 – 
Amit Singh Tomar
8 Мар 2013 в 13:41
Привет, kmort, есть ли способ связать двоичный файл ядра Linux из этого файла сборки, пытался это сделать, но его говорящий лайкер не найден
 – 
Amit Singh Tomar
8 Мар 2013 в 22:53
Я действительно в этом сомневаюсь. Загрузчик QNX, вероятно, подавился бы такой штукой. Вам придется разобраться со всей проблемой ELF ... Наверное, лучше придумать что-нибудь еще. Почему бы просто не использовать загрузчик Linux?
 – 
kmort
8 Мар 2013 в 23:02
Наше требование таково, что мы можем изменить этот файл сборки только для поддержки загрузки ядра Linux вместо qnx. При сборке нашего IFS мы получаем ошибку «Не могу найти необходимый компоновщик для» ядра Linux, и в основном это было выдано инструментом mkxfs, хотя у нас есть заголовок elf в нашей корзине ядра Linux. Есть ли способ, которым вы действительно хотите предложить это сделать?
 – 
Amit Singh Tomar
8 Мар 2013 в 23:18
Это довольно сложно. Вам придется копаться в загрузчике. Или поговорите с сотрудниками QNX на сайте www.QNX.com. Удачи. :-)
 – 
kmort
8 Мар 2013 в 23:54