Jump to content

    

Embedded Linux

3 hours ago, _3m said:

В Openocd символьная отладка ядра linux по jtag работает, но при запуске надо сделать пару магических действий вручную (надо поставить аппаратный брекпойнт и потом сказать openocd куда переместилось ядро после старта). Все документировано и работает если повторять по букварям.

В J-link commander похоже нет поддержки mmu и он виртуальные адреса не понимает.

Во, ссылку мне гугле сегодня прислал.
Мужик делится как делать символьную отладку ядра линукса в Visual Studio Code - https://github.com/Plailect/linux-devel 

Share this post


Link to post
Share on other sites
On 9/8/2019 at 11:38 PM, mantech said:

потом должны пересобрать ядро

Только в случае если ядро собрано без поддержки loadable modules.

Share this post


Link to post
Share on other sites
В 09.08.2016 в 01:46, Motion сказал:

3) Какие книги порекомендуете читать дальше?

букварь для встраиваемых линуксов "Embedded Linux System Design and Developent" ( перевод )

по сетям "Сетевое программирование от Бриджа" 

Сетевое программирование от Бриджа.pdf

Share this post


Link to post
Share on other sites
1 hour ago, juvf said:

букварь для встраиваемых линуксов "Embedded Linux System Design and Developent" ( перевод )

Книга хорошая, но про подключение JTAG/SWD там ни слова. 

Share this post


Link to post
Share on other sites
On 9/11/2019 at 4:35 PM, VTSei said:

поделитесь кто читал, насколько хороша эта - "Симмондс Крис - Встраиваемые системы на основе Linux"

Тоже стала интересна эта книга. Мне кажется общее представление о работе она даст, но практические примеры повторять точно не стоит, т.к. скорее всего они не заработают. Всё стремительно меняется и актуальной будет информация только из документации на ПО. За практическими примерами лучше идти на сайт разработчика платы, с которой собираетесь работать и изучать там всё.

Share this post


Link to post
Share on other sites
On 9/9/2019 at 3:49 AM, AlexandrY said:

Надо же, а я не знал. :laugh1:
Проблема не в виртуализации, в ядре виртуализации нет. И отладчик ходит мимо MMU. Проблема в отсутствии файлов с совместимой  отладочной информацией. 
А скомпилировать тем же Keil-ом нельзя, поскольку движок построения ядра это государство в государстве. 

Вообще-то есть виртуализация. Я когда писал драйверы с использованием ПДП (DMA) пользовался функциями аллокации памяти, которые возвращали как физический так и виртуальный адреса.
Вот документ из ядра:

https://www.kernel.org/doc/Documentation/DMA-API-HOWTO.txt

On 9/8/2019 at 4:38 PM, mantech said:

Да меня тоже не пугало, да и сейчас не пугает это дело, но, как вы отладите свой драйвер без кода ОС?? Вы написали драйвер, потом должны пересобрать ядро, это для меня было что-то с чем-то но это наверно потому, что я не придерживаюсь опенсорс философии:biggrin:, потом его загружаете и запускаете, и вот тут и надо отлаживать, только все вместе, когда идет взаимодействие ядра и вашего драйвера... Плюс еще кто-то должен запустить ваш драйвер, хотя можно просто для теста сделать probe. 

 

Вовсе не надо пересобирать ядро. Достаточно иметь файл карты адресов для точно той версии ядра, что вы собираетесь использовать.

On 9/15/2019 at 4:26 AM, wapster said:

Тоже стала интересна эта книга. Мне кажется общее представление о работе она даст, но практические примеры повторять точно не стоит, т.к. скорее всего они не заработают. Всё стремительно меняется и актуальной будет информация только из документации на ПО. За практическими примерами лучше идти на сайт разработчика платы, с которой собираетесь работать и изучать там всё.

В этой теме пишет Olej. Он написал несколько отличных книг по теме. Спросите его что почитать. Он дал ссылки. Я рекомендую его книги. Они написаны хорошим языком и дают хорошее представление. О некоторых его приемах я больше нигде не читал.

On 9/11/2019 at 1:48 AM, gosha-z said:

Только в случае если ядро собрано без поддержки loadable modules.

Не совсем так. Я давно не встречал ядро, что собрано без поддержки loadable modules. Необходимо еще два условия:

Построить модуль точно для той версии ядра, что используется и наличие директории с собраным ядром или хотя бы файл с картой памяти ядра нужной версии.

Share this post


Link to post
Share on other sites
On 8/13/2016 at 5:02 PM, jorikdima said:

Уже наверно не в тему, но пусть будут для кого-то книги, что я использую:

Embedded Linux Primer - A Practical, Real-World Approach (2006)

Prentice.Hall.Embedded.Linux.Primer.2nd.Edition.Oct.2010

OReilly.Building.Embedded.Linux.Systems.Aug.2008

ну и очевидно J.Corbet - Linux Device Drivers 3rd Edition - 2005

Embedded Linux Primer - A Practical, Real-World Approach (2006)
Классная книга.


J.Corbet - Linux Device Drivers 3rd Edition - 2005
как справочник. Есть все и обо всем, но учиться по ней невозможно. Если уже знаешь предмет, то очень полезна.

 

Самое классное руководство чтобы сразу начать есть, но написано по-английски. Оно с примерами и шаг за шагом дает первое представление о модулях.
https://www.tldp.org/LDP/lkmpg/2.6/lkmpg.pdf

 

Там представлены интерфейсы с пространством пользователя не совсем те, которыми надо пользоваться, но ими тоже можно. Этой книги недостаточно, но начать с нее легко.

Share this post


Link to post
Share on other sites
4 hours ago, Tarbal said:

Вообще-то есть виртуализация. Я когда писал драйверы с использованием ПДП (DMA) пользовался функциями аллокации памяти, которые возвращали как физический так и виртуальный адреса.
Вот документ из ядра:

https://www.kernel.org/doc/Documentation/DMA-API-HOWTO.txt

А вообще пользовались SWD отладчиком под ARM, знаете как это работает? Как происходит процесс символьной отладки в Keil, какие доступны там инструменты? 

Эт как-то странно читать про DMA из мануалов линукса, когда DMA гораздо точнее описано в мануале на сам SoC.  
И там нет никакой виртуализации. DMA могут работать только с физической памятью.  

Share this post


Link to post
Share on other sites
21 hours ago, AlexandrY said:

А вообще пользовались SWD отладчиком под ARM, знаете как это работает? Как происходит процесс символьной отладки в Keil, какие доступны там инструменты? 

Для Линукса? Да как-то не было необходимости. На других системах много чем отлаживал и Кейлом и ИАРом и Лаутербахом и Техас Инструментс Композером много чем еще. Не понятно как это относится к наличию виртуальной памяти в ядре Линукса.

21 hours ago, AlexandrY said:

Эт как-то странно читать про DMA из мануалов линукса, когда DMA гораздо точнее описано в мануале на сам SoC.  

Я вам не про DMA пишу, а про то как делается в ядре аллокация буфера. Неужели так рассеяно внимание, что заблудились в трех фразах.

21 hours ago, AlexandrY said:

И там нет никакой виртуализации. DMA могут работать только с физической памятью.  

Разве я писал, что DMA работает с виртуальными адресами?
Вы бы сначала разобрались с тем, что я написал.

Share this post


Link to post
Share on other sites
3 hours ago, Tarbal said:

Вы бы сначала разобрались с тем, что я написал.

Я ничего против, что вы так хорошо знаете линукс.
Но тут зашла речь о том как скрестить его с такими тулсами как  Keil или IAR , просто потому что они удобные.  
А они работают через SWD на ARM-ах, и там до лампочки какими функциями линукс пользуется чтобы выделить память. 
Если надо, то эти функции с виртуализацией можно и выкинуть чтобы не мешали восприятию, но это моя идея. 
А у вас-то есть идеи?  Но по теме.
Рассказывать как работает линукс не надо, на то мы и хотим переложить на Keil чтобы самим разобраться. :pardon:

Share this post


Link to post
Share on other sites
16 hours ago, AlexandrY said:

Я ничего против, что вы так хорошо знаете линукс.
Но тут зашла речь о том как скрестить его с такими тулсами как  Keil или IAR , просто потому что они удобные.  
А они работают через SWD на ARM-ах, и там до лампочки какими функциями линукс пользуется чтобы выделить память. 
Если надо, то эти функции с виртуализацией можно и выкинуть чтобы не мешали восприятию, но это моя идея. 
А у вас-то есть идеи?  Но по теме.
Рассказывать как работает линукс не надо, на то мы и хотим переложить на Keil чтобы самим разобраться. :pardon:

Я просто сказал, что ядро Линукса использует виртуальные адреса и привел доказательства в ответ на ваше предположение, что в ядре виртуальные адреса не используются. Ни больше ни меньше. Остальное вы домыслили сами.

По поводу Кейла или ИАРа для отладки Линукса:

Считаю задачу неоправдано сложной. Тем более, что все давно пользуются GDB. Мне только однажды понадобился JTAG отладчик, когда я чинил еxception  в загрузчике. Да и чаще пользуются printk и debugfs, но о них еще до меня было сказано. я отладил немало драйверов, не пользуясь GDB.

Для отладки ядра Линукса никакие отладчики с JTAG не нужны. В упоминавшейся выше книге

Embedded Linux Primer - A Practical, Real-World Approach (2006)

изложены методы отладки ядра.

Для графики в GDB используйте DDD или Еклипс.
 

Таким образом по отладке с использованием Кейл или ИАР я не смогу помочь. Если есть вопросы по стандартным методам, то постараюсь ответить.

Share this post


Link to post
Share on other sites
5 hours ago, Tarbal said:

Я просто сказал, что ядро Линукса использует виртуальные адреса и привел доказательства в ответ на ваше предположение, что в ядре виртуальные адреса не используются. Ни больше ни меньше. Остальное вы домыслили сами.

По поводу Кейла или ИАРа для отладки Линукса:

Считаю задачу неоправдано сложной. Тем более, что все давно пользуются GDB. Мне только однажды понадобился JTAG отладчик, когда я чинил еxception  в загрузчике. Да и чаще пользуются printk и debugfs, но о них еще до меня было сказано. я отладил немало драйверов, не пользуясь GDB.

Для отладки ядра Линукса никакие отладчики с JTAG не нужны. В упоминавшейся выше книге

Embedded Linux Primer - A Practical, Real-World Approach (2006)

изложены методы отладки ядра.

Для графики в GDB используйте DDD или Еклипс.
 

Таким образом по отладке с использованием Кейл или ИАР я не смогу помочь. Если есть вопросы по стандартным методам, то постараюсь ответить.

А не могли бы вы в 2х словах описать процесс отладки ядра/драйверов с помощью GDB на примере OpenWrt или обычного SDK-подобного дистрибутива?

Для этого весь дистрибутив (исходники ядра, тулчейн и тд) необходимо закинуть в эклипс? Вот скажем есть openwrt (собранный бинарник ядра) с включенным в него GDB сервером, устройство прошито, ОС запущена. Какие дальнейшие шаги?

 

Share this post


Link to post
Share on other sites
13 minutes ago, k000858 said:

 

Я для отладки ядра не использовал GDB. В книге, что я упомянул, описано как его подключать, но мне не виделось необходимым это делать.
Дело в том, что ядро сложная система. Остановите его на точке останова и многие процессы не успеют вовремя и все посыплется.
В таких случаях предпочтительнее трассировка. Тот же printk.

Через debugfs или procfs можно смотреть значения переменных в реальной системе или менять их. Немного другая философия отладки.

Зададите вопрос поконкретнее и я подскажу вам более подробно что делать. Но не сейчас. Сейчас я иду спать.
Если ищете с чего начать, то проработайте примеры из руководства:
https://www.tldp.org/LDP/lkmpg/2.6/lkmpg.pdf
Я им пользовался когда-то.

Как альтернатива посмотрите книгу, что написал olej. Выше есть его постинг. Там много полезной информации. Сначала поделайте примеры из какой-нибудь из упомянутых мной книг, а потом вы будете лучше понимать как отлаживать. Да и меня понимать будете лучше.

Share this post


Link to post
Share on other sites
1 hour ago, Tarbal said:

Дело в том, что ядро сложная система. Остановите его на точке останова и многие процессы не успеют вовремя и все посыплется.

Вот этот тупик в рассуждениях знатоков линукса меня портрясает. 
С одной стороны идут такие заявки дескать мы тут все знаем, с другой стороны - "ядро сложная система".
И ничего про отладку через SWD сказать не можем, юзайте лучше printk
А если нам надо отладить сам printk? А если нам нужна потактовая трассировка. Если нам нужен мгновенный потактовый профайлинг? 
И опять, что это за мифическая сложность? Ядро ж в исходниках.
Nucleus, ThreadX, VxWorks значит ни у кого не вызывает проблем отлаживать через JTAG, а у линукса такая загвоздка, понимаешь - высокая сложность. Смех берет. 
Нет бы сказать - ребята, не знаем, мы с линуксом как с черным ящиком работаем. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now