Linux для embedded применений

встраиваемые модели

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 21 ноя 2011, 14:19

Теперь можно двигаться дальше по начально сформулированной постановке задачи:
Olej писал(а): 3. затолкать в п.2 полученное в п.1 (т.е. перекопировать всё необходимое в виртуальную машину) + некоторый набор нужных мне приложений (пусть пока тестового свойства)...

4. загрузить эту систему.

Код: Выделить всё

[olej@nvidia images]$ pwd
/home/olej/buildroot-2011.08/output/images
Вот 1-я попытка :mrgreen: :

Код: Выделить всё

[olej@nvidia images]$ qemu-system-arm -cpu cortex-a8 -kernel zImage -initrd rootfs.ext2
qemu: hardware error: integratorcm_read: Unimplemented offset 0x1f1018

CPU #0:
R00=00013da1 R01=00000055 R02=00000000 R03=101f1000
R04=0000000d R05=001c27eb R06=001c2828 R07=001c2824
R08=00000100 R09=00000000 R10=10000000 R11=31100003
R12=101f1000 R13=001c381c R14=00010a74 R15=00010878
PSR=200001d3 --C- A svc32
Аварийный останов (core dumped)
А регистры то ARM-овские! :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 21 ноя 2011, 14:27

Olej писал(а): Вот 1-я попытка :mrgreen: :
2-я попытка:
- после пересборки под другой ARM (cortex вообще капризны в таком качестве) и с другими параметрами make menuconfig ...
- пересборка теперь (после начальной сборки) идёт не так чудовищно долго:

Код: Выделить всё

[olej@nvidia buildroot-2011.08]$ time make
/usr/bin/make -j2  HOSTCC="/usr/lib/ccache/gcc" HOSTCXX="/usr/lib/ccache/g++" silentoldconfig
make[1]: Вход в каталог `/home/olej/buildroot-2011.08'
...
real    0m7.195s
user    0m1.586s
sys     0m0.554s
- на то он и make :lol:

Код: Выделить всё

[olej@nvidia images]$ qemu-system-arm -kernel zImage -initrd rootfs.cpio -M versatilepb
...
QEMU.png
QEMU.png (29.16 КБ) 11883 просмотра
Всё, в конце концов, закончилось kernel panic, но это уже после того, как загрузилось ядро Linux, и даже стартонула сетевая подсистема и TCP/IP...

Всё дальнейшее достигается параметрами конфигурирования при make menuconfig

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 21 ноя 2011, 18:44

Olej писал(а):Всё дальнейшее достигается параметрами конфигурирования при make menuconfig
Вот запуск работающего Linux собранного под ARM плату versatile :

Код: Выделить всё

[olej@nvidia images]$ qemu-system-arm -kernel zImage -initrd rootfs.cpio -M versatilepb
...
Терминальный вывод направлен через последовательный порт /dev/tyS0 QEMU:
QEMU1.png
QEMU1.png (24.78 КБ) 11877 просмотров

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 21 ноя 2011, 20:28

Olej писал(а): Вот запуск работающего Linux собранного под ARM плату versatile :
...
Терминальный вывод направлен через последовательный порт /dev/tyS0 QEMU:
А в этом варианте пересобраной системы уже идёт полноценный диалог shell (показано несколько сетевых команд):

Код: Выделить всё

[olej@nvidia images]$ qemu-system-arm -kernel zImage -initrd rootfs.cpio -M versatilepb -nographic
Uncompressing Linux... done, booting the kernel.

Welcome to Buildroot
buildroot login: root
# ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

# ifconfig eth0 192.168.2.1 up
# ifconfig
eth0      Link encap:Ethernet  HWaddr 52:54:00:12:34:56  
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:25 DMA chan:ff 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

# 
То же самое, естественно, можно делать и в консоли сериального порта QEMU в граф. реж.:

Код: Выделить всё

[olej@nvidia images]$ qemu-system-arm -kernel zImage -initrd rootfs.cpio -M versatilepb
...
переключаемся в сериальную консоль <Ctrl><Alt><3> , выглядит это так:
Вложения
QEMU3.png
QEMU3.png (7.29 КБ) 12123 просмотра

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 21 ноя 2011, 20:39

Olej писал(а): А в этом варианте пересобраной системы уже идёт полноценный диалог shell
Для того, чтобы собрать вот такой работающий ARM Linux embedded (может быть отправной точкой) для платы (kit) versatile важно было (много времени убил!) найти (в интернет) выставить (в make menuconfig) 2 противных параметра...

Меню: Kernel
ker.png
ker.png (70.02 КБ) 11872 просмотра
Меню: System Configuration
SysConf.png
SysConf.png (88.9 КБ) 11872 просмотра

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 21 ноя 2011, 20:56

Olej писал(а):важно было (много времени убил!) найти (в интернет) выставить (в make menuconfig) 2 противных параметра...
Без вот этого - никуда: http://wiki.qemu.org/Manual - это огромный набор (больше в природе нет ;-) ) набор документации по QEMU.

+ вот совершенно другой tools (в сравнении с BuildRoot) построения ARM embedded:
1. Virtual Development Board - http://www.elinux.org/Virtual_Development_Board
2. Sourcery G++ Lite 2011.03-41 for ARM GNU/Linux - https://sourcery.mentor.com/sgpp/lite/a ... elease1803

Ну, и наконец, можно посмотреть "последнюю часть марлизонского балета" ;-) , который сформулировали в начальной постановке:
5. но этого мало: хотелось бы наблюдать все происходящие там процессы с помощью GDB.
Здесь и самих тех. материалов по QEMU достаточно, но вот ещё попалось, зело интересное ;-) :
Debugging Linux systems using GDB and QEMU - http://files.meetup.com/1590495/debugging-with-qemu.pdf

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 21 ноя 2011, 23:14

Olej писал(а): Ну, и наконец, можно посмотреть "последнюю часть марлизонского балета" ;-) , который сформулировали в начальной постановке:
5. но этого мало: хотелось бы наблюдать все происходящие там процессы с помощью GDB.
Возможность состоит в том, чтобы:
- добавить уровень отладочности собираемой системы (стрипы убрать, уровни оптимизации)...
- загрузить из одного терминала виртуальную машину с ARM Linux;
- а из другого терминала - GDB (снаружи QEMU!) и ним можно просматривать что там в ядре...
Грубо это выглядит так:

Код: Выделить всё

[olej@nvidia images]$ qemu-system-arm -kernel zImage -initrd rootfs.cpio -M versatilepb -nographic -s
Uncompressing Linux... done, booting the kernel.

Welcome to Buildroot
buildroot login: root
#
#
QEMU: Terminated via GDBstub
- это в одном терминале где выполняется новая система...

Код: Выделить всё

[olej@nvidia linux-3.0.4]$ pwd
/home/olej/buildroot-2011.08/output/build/linux-3.0.4
[olej@nvidia linux-3.0.4]$ gdb vmlinux
GNU gdb (GDB) Fedora (7.2-51.fc14)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/olej/buildroot-2011.08/output/build/linux-3.0.4/vmlinux...(no debugging symbols fo
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
warning: Architecture rejected target-supplied description
0x00004000 in ?? ()
(gdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x00004000 in ?? ()
(gdb) q
A debugging session is active.

    Inferior 1 [Remote target] will be killed.

Quit anyway? (y or n) y
- а это другой терминал, где крутится GDB (каталог запуска совсем другой, там где находится файл vmlinux!).

P.S. это только набросок "того как"... но видно и понятно уже, что это работает.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 29 ноя 2011, 15:30

Olej писал(а):P.S. это только набросок "того как"... но видно и понятно уже, что это работает.
Я намеревался дописать как с GDB отлаживать свои модули ядра в таком стенде embedded-устройства, но попалась на глаза статья, где всё это подробно описано (хотя речь там и о традиционном десктопном Linux): http://wiki.opennet.ru/Linux_kernel_debug.

Обратите внимание: самое интересное там - это там последний пример, который без объяснений показывает как найти адреса программных секций в модуле ядра ... а именно вот этот пример:

Код: Выделить всё

# На виртуальной машине загружаем модуль
$ sudo modprobe lg

# Узнать адреса, куда он был загружен
$ cat /sys/module/lg/sections/.text
0xe0baa000

$ cat /sys/module/lg/sections/.data
0xe0baec50

$ cat /sys/module/lg/sections/.bss
0xe0baf20c

# На основной машине. Загрузка модуля для отладки с расширением *.o, а не *.ko.
(gdb) add-symbol-file /usr/src/linux/drivers/lguest/lg.o 0xe0baa000  -s .data 0xe0baec50 \ -s .bss 0xe0baf20c
add symbol table from file "/usr/src/linux/drivers/lguest/lg.o" at 
	.text_addr = 0xe0baa000 
	.data_addr = 0xe0baec50 
	.bss_addr = 0xe0baf20c 
(y or n) y 
Reading symbols from /usr/src/linux/drivers/lguest/lg.o...done. 

(gdb) print lguest_lock
$1 = {count = {counter = 1}, wait_lock = {raw_lock = {slock = 0}}, wait_list = {next = 0xe0baec58, prev = 0xe0baec58}}
А дальше всё уже - вопрос навыков и экспериментирования ;-)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 06 янв 2012, 17:50

Olej писал(а): + вот совершенно другой tools (в сравнении с BuildRoot) построения ARM embedded:
1. Virtual Development Board - http://www.elinux.org/Virtual_Development_Board
2. Sourcery G++ Lite 2011.03-41 for ARM GNU/Linux - https://sourcery.mentor.com/sgpp/lite/a ... elease1803
Sourcery_CodeBench - чрезвычайно интересный проект для разработки (или портирования) ПО на платформе ARM.
Быстро развивается, релиз за время написания темы поменялся не раз, берём здесь:
https://sourcery.mentor.com/sgpp/lite/a ... elease2032

Там можно взять инсталляции 2-х видов:

Код: Выделить всё

[olej@notebook Sourcery_CodeBench]$ ls -l arm*
-rw-rw-r-- 1 olej olej 112761377 Янв  4 20:58 arm-2011.09-69-arm-none-eabi.bin
-rw-rw-r-- 1 olej olej 138515340 Янв  4 21:02 arm-2011.09-69-arm-none-eabi.src.tar.bz2
.tar.bz2 - это, естественно, архив, для которого нужно создавать каталог-путь, разархивировать и т.д. - это более понятный способ.
Меня заинтересовал .bin инсталлятор - это shell-скрипт, который делает это разворачивание сам, либо в консольном режиме (ключ -i console) либо в GUI, в GUI это всё крутится на Java+Swing, поэтому интресно как это в типовом дистрибутиве Linux происходит (для Debian/Ubuntu там будут определённые сложности с shell, нужно bash использовать ... это в документации предупреждают).

Код: Выделить всё

[olej@notebook Sourcery_CodeBench]$ sh ./arm-2011.09-69-arm-none-eabi.bin
Checking for required programs: awk grep sed bzip2 gunzip
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Linux для embedded применений

Непрочитанное сообщение Olej » 06 янв 2012, 18:27

Olej писал(а):

Код: Выделить всё

[olej@notebook Sourcery_CodeBench]$ sh ./arm-2011.09-69-arm-none-eabi.bin
Checking for required programs: awk grep sed bzip2 gunzip
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
...
Очень прилично идёт ... разворачивание, потому как инсталляцией это назвать нельзя, здесь ничего не инсталлируется (и это радует :lol: ).
CodeBench_02.png
CodeBench_02.png (41.28 КБ) 11656 просмотров
CodeBench_03.png
CodeBench_03.png (56.29 КБ) 11660 просмотров
CodeBench_04.png
CodeBench_04.png (44.4 КБ) 11661 просмотр

Ответить

Вернуться в «Одноплатные компьютеры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя