Официальный форум СВД Встраиваемые Системы
25 Апрель, 2024, 09:57:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Запуск драйвера SD/MMC x86  (Прочитано 3541 раз)
yanvasilij
Пользователь

Сообщений: 16


« : 10 Июль, 2018, 14:40:05 »

Добрый день!


Пытаюсь запустить драйвер emmc для моего устройства на базе intel atom e3800, на котором запустил вот это BSP Generic x86 BIOS / APIC. В составе этого BSP есть драйвер devb-mmcsd, который, если я правильно понял, мне и нужен. В build-файле есть строка запуска этого драйвера:

Код:
devb-mmcsd mmcsd vid=0x8086,did=0x0f14,irq=18

Я не совсем понимаю чему должны быть равны vid/did, если моя emmc подключена к mcc интерфейсу на самом процессоре?

Если я пытаюсь пуститься с с такими же параметрами, как build-файле, то получаю ошибку:

Код:
No host controller found
xpt_configure:  mmcsd SIM attach failure

При этом в slog я наблюдаю следующее:

Код:
devb-mmcsd 1.00A (Jan 12 2017 11:25:35) libcam.so (Jun 20 2012 13:40:15) bver 6050001- sdhci_init: pci_attach failed5)  sdhci_init: pci_attach failed5)  sdhci_init: pci_attach failed5)  sdhci_init: pci_attach failed5)

Подскажите с какими параметрами надо запускать devb-mmcsd для emmc на встроенном в процессор интерфейсе?


 - QNX6.5;
 - микросхема eMMC: MTFC4GACAAAM-4M-IT;
 - команда запуска: devb-mmcsd mmcsd vid=0x8086,did=0x0f14,irq=18;
 - если я правильно понимаю, то в результате должен появится /dev/hd1;
 - при запуске процесса появляется сообщение:
      No host controller found
      xpt_configure:  mmcsd SIM attach failure

Это как-то связано с тем, что у меня какие-то проблемы с pci, судя по логу загрузки?

Код:
Welcome to QNX Neutrino 6.5.0 SP1!
Starting slogger...
Starting serial server...
Starting PCI server...
Start xHCI USB services...
main:  Unable to locate pci server
main:  Unable to locate pci server
main:  Unable to locate pci server
main:  Unable to locate pci server
main:  Unable to locate pci server
main:  Unable to locate pci server
main:  Unable to locate pci server
main:  Unable to locate pci server
main:  Unable to locate pci server
main:  Unable to locate pci server
Starting Input services...
Starting some consoles...
Can't connect to HID Server No such file or directory
#
#
# sloginfo
Time             Sev Major Minor Args
Oct 28 18:30:02    2    17     0 pci-bios: No BIOS present - Status ffffffff - errno 14!
Oct 28 18:30:02    2    17     0 pci-bios: HWI failed!
Oct 28 18:30:02    2    17     0 pci_server: No dll loaded!
Oct 28 18:32:10    2    19   1800 devb-mmcsd 1.00A (Jan 12 2017 11:25:35)
Oct 28 18:32:10    2     5     0 libcam.so (Jun 20 2012 13:40:15) bver 6050001
Oct 28 18:32:10    2    19   1800 sdhci_init: pci_attach failed




build-файл:

Код:
[image=0x1400000]
[virtual=x86,elf] boot = {
  startup-apic -v
PATH=/proc/boot:/bin:/usr/bin:/sbin:/usr/sbin LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib procnto-smp-instr -v
}

[+script] startup-script = {
# Programs require the runtime linker (ldqnx.so) to be at a fixed location
procmgr_symlink ../../proc/boot/libc.so.3 /usr/lib/ldqnx.so.2
display_msg Welcome to QNX Neutrino 6.5.0 SP1 on x86!

#-------------------------------------------------------------------------------
#display_msg "Starting slogger..."
slogger &
waitfor /dev/slog
#-------------------------------------------------------------------------------
#display_msg "Starting serial server..."
devc-ser8250 -e -b115200 3f8,4 &
waitfor /dev/ser1
reopen /dev/ser1

display_msg Welcome to QNX Neutrino 6.5.0 SP1!
display_msg "Starting slogger..."
display_msg "Starting serial server..."

#-------------------------------------------------------------------------------
display_msg "Starting PCI server..."
# by default, pci-bios-v2 supports MSI interrupts; the -D option enables support for MSI interrupts on graphics/video hardware as well
pci-bios -v -m &
waitfor /dev/pci

#-------------------------------------------------------------------------------
#display_msg "Starting e1000 network driver..."
#io-pkt-v6-hc -de1000 &
#waitfor /dev/socket
#dhcp.client

#-------------------------------------------------------------------------------
        # uncomment the lines below for EHCI USB support; ensure that the USB mode in the BIOS is also set to 'EHCI Mode'

# Due to an issue between pci-bio-v2, MSI interrupts, and ECHI USB host controllers, it is necessary to specify an
# IRQ in the range of 16 to 23, when using devu-ehci with startup-apic; you may need to experiment to find the
# correct IRQ value for your system.

        # display_msg "Start EHCI USB services..."

        # io-usb -dehci pindex=0,irq=23 &
        # waitfor /dev/io-usb/io-usb 4
        # waitfor /dev/io-usb/devu-ehci.so 4

        # uncomment the lines below for xHCI USB support; ensure that the USB mode in the BIOS is also set to 'XHCI Mode'
        display_msg "Start xHCI USB services..."
        io-usb -dxhci &
        waitfor /dev/io-usb/io-usb 4
        waitfor /dev/io-usb/devu-xhci.so 4

#-------------------------------------------------------------------------------
# uncomment for AHCI support - assumes a QNX6 filesystem exists on an internal SATA drive
#
# display_msg "Starting SATA AHCI..."
# devb-ahci ahci &
# waitfor /dev/hd0t179
# mount -t qnx6 /dev/hd0t179 /hd

# uncomment for MMCSD support - it may be necessary to specify the SD controller's VID and DID,
# and the APIC IRQ value (APIC IRQs 16 to 23) for some controllers
       #display_msg "starting MMCSD driver..."
       #devb-mmcsd mmcsd vid=0x8086,did=0x0f14,irq=18 &
       #waitfor /dev/hd1

#-------------------------------------------------------------------------------
display_msg "Starting Input services..."
io-hid -d usb /dev/io-usb/io-usb &

# some systems with legacy PS2 controllers require the command line below to be used instead
# io-hid -d ps2ser kbd:kbddev:ps2mouse:mousedev -d usb /dev/io-usb/io-usb &

#-------------------------------------------------------------------------------
#display_msg "Starting some common servers..."
#pipe
#devc-pty &
#qconn

#-------------------------------------------------------------------------------
#display_msg "Starting Intel HD Audio driver..."
#io-audio -dintel_hda &

#-------------------------------------------------------------------------------
display_msg "Starting some consoles..."
devc-con-hid -n4 &
reopen /dev/con1

# start a serial debug shell
on -t /dev/ser1 /proc/boot/ksh &

# start a console shell
[+session] sh /proc/boot/.console.sh &
}

[type=link] /tmp=/dev/shmem
[type=link] /bin/sh=/proc/boot/ksh

# Shared libraries
libc.so.3
libm.so
libz.so

###########################################################################
## uncomment for Networking
###########################################################################
#libsocket.so
#devnp-e1000.so
#devnp-asix.so
# devnp-rtl8169.so
# devnp-smsc9500.so
# devnp-speedo.so



###########################################################################
## uncomment for BLOCK driver
###########################################################################
libcam.so
io-blk.so
cam-disk.so
fs-qnx4.so
fs-qnx6.so
fs-dos.so
fs-ext2.so
#cam-cdrom.so
#fs-cd.so

###########################################################################
## uncomment for USB driver
###########################################################################
libusbdi.so
libhiddi.so
devu-ehci.so
devu-xhci.so

###########################################################################
## uncomment for Intel HD Audio Support
###########################################################################
#deva-ctrl-intel_hda.so
#deva-mixer-hda.so
#libasound.so.2

###########################################################################
## uncomment for io-hid
###########################################################################
#devh-usb.so
#devh-ps2ser.so

[data=c]

###########################################################################
## general commands
###########################################################################
cp
mkdir
ls
#pipe
#pidin
rm
mv
ksh
on
uname
slogger
sloginfo
slay
sync
mount
umount
shutdown
less
setconf
getconf
#grep
login
qconn
rtc
date
fdisk
cat
chown
chmod
use
which


###########################################################################
## uncomment for serial
###########################################################################
devc-con
devc-con-hid
devc-pty
devc-ser8250

###########################################################################
## uncomment for audio
###########################################################################
#io-audio
#wave
#waverec

###########################################################################
## uncomment for inetd support
###########################################################################
#devc-pty
#/usr/sbin/ftpd=ftpd
#/usr/sbin/inetd=inetd
#/bin/login=login
#/bin/passwd=passwd
#/usr/sbin/telnetd=telnetd

#/etc/hosts=${QNX_TARGET}/etc/hosts
#/etc/services=${QNX_TARGET}/etc/services

#/etc/passwd = {
#root::0:0:Superuser:/:/bin/sh
#user:x:100:100:User:/hd/home/user:/bin/sh
#}

#/etc/shadow = {
#user:68qCI1lS3Sz9w:1412120627:0:0
#}

#/etc/inetd.conf = {
#ftp        stream tcp nowait root  /usr/sbin/ftpd           in.ftpd -l
#telnet     stream tcp nowait root  /usr/sbin/telnetd        in.telnetd
#}

#/etc/ftpusers = {
#/* Allow all users to connect to the ftp server */
#* allow
#}

#/etc/ftpd.conf = {
#/* Make things a+rw by default */
#umask all 0000
#}


###########################################################################
## PCI support
###########################################################################
pci-bios=pci-bios
pci

###########################################################################
## uncomment for network support
###########################################################################
#io-pkt-v6-hc
#nicinfo
#ifconfig
#ftp
#ping
#fs-nfs3
#dhcp.client

###########################################################################
## uncomment for BLOCK driver
###########################################################################
devb-ahci
devb-mmcsd
dcheck


###########################################################################
## uncomment for USB
###########################################################################
io-usb
usb
devb-umass
#io-hid
hidview

###########################################################################
## Set environment and start the main shell
###########################################################################
[perms=0744] .console.sh={

    echo Setting environment variables...
    export SYSNAME=nto
    export TERM=qansi
    export HOME=/
    export PATH=/proc/boot:/bin:/usr/bin:/sbin:/usr/sbin
    export LD_LIBRARY_PATH=:/proc/boot:/lib:/usr/lib:/usr/lib/graphics:/lib/dll:/opt/lib
    echo Starting inetd service...
    inetd
    echo done.
    ksh -l
}





« Последнее редактирование: 11 Июль, 2018, 14:59:39 от yanvasilij » Записан
yanvasilij
Пользователь

Сообщений: 16


« Ответ #1 : 13 Июль, 2018, 14:35:52 »

Вообщем разобрался. Проблема была в том, что мой биос (coreboot) из коробки не поддерживает прерывания необходимые QNX, а я пытался грузить QNX напрямую из coreboot. Технически coreboot даже не биос, но если ему выбрать в качестве payload SeaBIOS и уже из SeaBIOS грузить QNX, то сервер pci в qnx запускается нормально. Посмотреть пару vid/did можно во-первых в datasheet в разделе (PCI Configuration Space), а во вторых в выводе команды pci -v. Правда в моем случае у меня запустился только один MMCSD контроллер из трех:

# devb-mmcsd mmcsd vid=0x8086,did=0x0f16,irq=18

После этой команды карта памяти появляется в /dev/ и успешно монтируется. А вот интересующий меня 0x8086/x0f50 и 0x8086/0x0f15 так и не запускаются - их не видит pci сервер. Похоже не видит по той причине, что их не видят coreboot и seabios - я не вижу их в логах (см. прикрепленный файл). А почему их нет в coreboot и SeaBIOS я пока не знаю.
« Последнее редактирование: 13 Июль, 2018, 14:47:52 от yanvasilij » Записан
Филипп Попченко
Сотрудник СВД ВС
Интересующийся

Сообщений: 4


WWW
« Ответ #2 : 16 Июль, 2018, 14:09:24 »

Здравствуйте.

В coreboot можно выбирать pci устройства, которые будут инициализированы. В случае с eMMC можно выбрать только один контроллер: eMMC 4.1 (0xf14) или eMMC 4.5 (0xf50). Нужно использовать eMMC 4.5. Проверьте, что у вас инициализируются нужные контроллеры: SDIO (0xf15), SD (0xf16), eMMC (0xf50). Также, если используется seabios, нужно убедиться, что в его настройках выбрана поддержка SD контроллеров.

Кроме того мы делали фикс для драйвера SD/MMC, который позволяет сканировать шину на наличие подходящих контроллеров. Фикс затрагивает не только драйвер SD/MMC, а так же PCI сервер в APIC режиме (добавлена таблица прерываний для процессоров семейства Intel Atom e38xx).
Записан

Сотрудник СВД Встраиваемые Системы
yanvasilij
Пользователь

Сообщений: 16


« Ответ #3 : 16 Июль, 2018, 16:02:51 »

В coreboot можно выбирать pci устройства, которые будут инициализированы. В случае с eMMC можно выбрать только один контроллер: eMMC 4.1 (0xf14) или eMMC 4.5 (0xf50). Нужно использовать eMMC 4.5. Проверьте, что у вас инициализируются нужные контроллеры: SDIO (0xf15), SD (0xf16), eMMC (0xf50).

Насколько я понял это делает файл devicetree.cb:

Код:
...
device pci 10.0 off end # 8086 0F14 - EMMC Port -
device pci 11.0 on end # 8086 0F15 - SDIO Port -
device pci 12.0 on end # 8086 0F16 - SD Port MicroSD on SD3
device pci 13.0 on end # 8086 0F23 - SATA AHCI Onboard & HSEC
device pci 14.0 on end # 8086 0F35 - USB XHCI - Onboard & HSEC  - Enabling both EHCI and XHCI will default to EHCI if not changed at runtime
device pci 15.0 on end # 8086 0F28 - LP Engine Audio LSEC
device pci 17.0 on end # 8086 0F50 - MMC Port -
...

После включения в devicetree, сервер pci действительно "увидел" недостающие 0x8086/0x0f15 и 0x8086/0x0f50 (лог pci -v в прикрепленном файле). Однако при запуске самого драйвера, устройство в /dev/hdx не монтируется. Команда запуска драйвера:

Код:
devb-mmcsd mmcsd vid=0x8086,did=0x0f50,irq=44
devb-mmcsd mmcsd vid=0x8086,did=0x0f15,irq=17

В sloginfo в результате вижу следующее:

Код:

...
Feb 11 15:23:34    2    19   1800 devb-mmcsd 1.00A (Jan 12 2017 11:25:35)
Feb 11 15:23:34    2     5     0 libcam.so (Jun 20 2012 13:40:15) bver 6050001
Feb 11 15:23:34    5    17     0 io_open for id = 4
Feb 11 15:40:20    5    17     0 io_open for id = 5
Feb 11 15:40:22    6    17     0 addup_resources: Header Type 81
Feb 11 15:40:22    6    17     0 addup_resources: Header Type 1
Feb 11 15:40:23    6    17     0 addup_resources: Header Type 1
Feb 11 15:40:23    6    17     0 addup_resources: Header Type 1
Feb 11 15:40:23    6    17     0 addup_resources: Header Type 81
Feb 11 15:40:23    6    17     0 addup_resources: Header Type 81
Feb 11 15:40:23    6    17     0 addup_resources: Header Type 81
Feb 11 15:40:23    5    17     0 io_close_ocb


Также, если используется seabios, нужно убедиться, что в его настройках выбрана поддержка SD контроллеров.

Это в настройка сборки SeaBIOS?

Кроме того мы делали фикс для драйвера SD/MMC, который позволяет сканировать шину на наличие подходящих контроллеров. Фикс затрагивает не только драйвер SD/MMC, а так же PCI сервер в APIC режиме (добавлена таблица прерываний для процессоров семейства Intel Atom e38xx).

Наш процессор как раз из этого семейства. Драйвер с фиксом есть в свободном доступе?
« Последнее редактирование: 17 Июль, 2018, 06:55:23 от yanvasilij » Записан
Филипп Попченко
Сотрудник СВД ВС
Интересующийся

Сообщений: 4


WWW
« Ответ #4 : 17 Июль, 2018, 16:06:40 »

Цитировать
Насколько я понял это делает файл devicetree.cb:
Верно.

Устройство 0x8086/0x0f15 - это контроллер, который используется для подключения устройств с SDIO интерфейсом, для которого нужен отдельный драйвер. В частности, на e38xx, контроллер предназначен для работы с Wi-Fi устройствами.

Цитировать
Это в настройка сборки SeaBIOS?
Да,  в конфиге сборки SeaBIOS: CONFIG_SDCARD=y.

Цитировать
Драйвер с фиксом есть в свободном доступе?
По поводу драйвера отправляйте запрос нашу электронную почту.
Записан

Сотрудник СВД Встраиваемые Системы
yanvasilij
Пользователь

Сообщений: 16


« Ответ #5 : 24 Июль, 2018, 10:32:58 »


Устройство 0x8086/0x0f15 - это контроллер, который используется для подключения устройств с SDIO интерфейсом, для которого нужен отдельный драйвер. В частности, на e38xx, контроллер предназначен для работы с Wi-Fi устройствами.


Спасибо за помощь! Сначало было даже не поверили, но внимательно почитали datasheet и лично в этом убедилсь )).

А по-поводу 8086/0F50 - вообще возможно запустить драйвер devb-mmcsd для этого устройства? В исходниках драйвера есть многомерная структура mmcsd_products, в которой перечисленны пары VID/DID с явным указанем на инициализирующую функцию:

Код:
static struct _mmcsd_product mmcsd_products[] =
{
{ 0x8086, 0x811E, 0, "Intel SCH", sdhci_init },
{ 0x8086, 0x811D, 0, "Intel SCH", sdhci_init },
{ 0x8086, 0x811C, 0, "Intel SCH", sdhci_init },
{ 0x1095, 0x0670, 0, "SII SDHCI", sdhci_init },
{ 0, 0, 0, NULL, NULL }
};

Поскольку eMMC интрефейс параллельный, то инициализация у него отличиается от последовательного 8086/0F16. Я подумал, что можно добавить с мой 8086/0F50 и пустить его по ветке ESDHC, но тоже ничего из этого не вышло:

Код:
...
{ 0x8086, 0x0F50, 0, "Intel eMMC", esdhc_init },
...

Код:
devb-mmcsd vid=0x8086,did=0x0f50

Записан
Филипп Попченко
Сотрудник СВД ВС
Интересующийся

Сообщений: 4


WWW
« Ответ #6 : 25 Июль, 2018, 12:30:30 »

Здравствуйте.

Выслали драйвер на почту.
Записан

Сотрудник СВД Встраиваемые Системы
yanvasilij
Пользователь

Сообщений: 16


« Ответ #7 : 26 Июль, 2018, 12:40:06 »

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

Во-первых, после обновления драйвера pci, команда pci -v стала корректно отображать номера прерывания всех устройств. Теперь, чтобы узнать значение параметра irq при запуске драйвера, можно посмотреть в выводе pci -v (до этого значения там были некорректные).

Во-вторых, при запуске драйвера, eMMC появляется в /dev. Однако, чтобы драйвер нормально запустился нужно не забыть правильно настроить мультиплексинг пинов в файле gpio.c в исходниках coreboot. Иначе при запуске драйвер вернёт ошибку "Unsupported card inserted". Конкретно в случае с Intel Atom E38xx, согласно документации на процессор, функция пинов для eMMC 4.5 должна быть "GPIO F3".

К сожалению конкретно в нашем случае микросхема так и не запустилась на 100%. После монтирования утилита fdisk показала неправильный размер устройства:

Код:
# fdisk /dev/hd0 info
Physical disk characteristics: (/dev/hd0)
    Disk type        : Direct Access (0)
    Cylinders        : 0
    Heads            : 64
    Sectors/Track    : 32
    Total Sectors    : 0
Partition table information:
    0: (255) beg(h=63,s=32,c=1812255) end(h=1,s=22,c=751670) off=3711500287, size=2122887223
    1: (50) beg(h=1,s=24,c=790) end(h=1,s=23,c=758) off=1617975, size=4294901760
    2: (255) beg(h=63,s=32,c=1713311) end(h=1,s=22,c=662710) off=3508862975, size=2143334455
    3: (0) beg(h=0,s=0,c=0) end(h=0,s=0,c=0) off=2922426423, size=4294946866 signature1=0xFF, signature2=0xFF


# fdisk /dev/hd0 show                                         

     _____OS_____     Start      End     ______Number______   Size    Boot 
     name    type    Cylinder  Cylinder  Cylinders   Blocks                 

1.   nonQNX   255    1812255     751670   4293906712  2122887223  1036566 MB
2.   nonQNX    50        790        758   4294967265  4294901760  2097120 MB   *
3.   nonQNX   255    1713311     662710   4293916696  2143334455  1046550 MB   *
4.   ------   ---   --------   --------   -------  --------  -----       


Более детальное изучение проблемы при помощи логов драйвера и осциллографа показало, что сама микросхема при запросе Card Identification Data, MMC Card Specific Data, MMC Extended Card Specific Data отвечает неверно, хотя запросы от процессора полностью соответствуют спецификации. Схемотехнику перепроверили - вроде все верно. Есть предположение, что сама микросхема контрафактная.
Записан
yanvasilij
Пользователь

Сообщений: 16


« Ответ #8 : 06 Ноябрь, 2018, 10:35:49 »

Пришла обновленная версия платы. Соответственно микросхема eMMC была из другой партии. Там все корректно заработало, удалось отформатировать и загрузиться с нее. Большое спасибо!
Записан
Алексей Луньков
Интересующийся

Сообщений: 3


« Ответ #9 : 05 Июнь, 2019, 11:00:52 »

Добрый день! Возникла аналогичная проблема! Не могли бы Вы выслать драйвер на почту?
Записан
Владимир Махилёв
Сотрудник СВД ВС
Старожил

Сообщений: 704



WWW
« Ответ #10 : 05 Июнь, 2019, 11:44:04 »

Добрый день! Возникла аналогичная проблема! Не могли бы Вы выслать драйвер на почту?

Напишите пожалуйста запрос по электронной почте или через форму обратной связи: http://kpda.ru/contacts/ask.php
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2024 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 01 Апрель, 2024, 08:55:16