U-Boot/ru
From Openmoko
Languages: |
English • العربية • Български • Česky • Dansk • Deutsch • Esperanto • Eesti • Español • فارسی • Suomi • Français • עברית • Magyar • Italiano • 한국어 • Nederlands • Norsk (bokmål) • Polski • Português • Română • Русский • Svenska • Slovenčina • Українська • 中文(中国大陆) • 中文(台灣) • Euskara • Català |
Загрузчик, используемый в смартфоне, называется U-Boot. Он обеспечивает начальную функциональность Openmoko во время загрузки: USB DFU для прошивки внутреннего ПО телефона, начальная заставка, загрузочное меню, консоль для введения команд загрузчику, конфигурировавшие среды загрузчика и собственно загрузка ядра.
Для использования доступно несколько версий загрузчика u-boot.
Фаза 0. Быстрый старт
- Убедитесь, что не забыли вставить батарейку, а USB-кабель не был ни к чему подключен в течение последних 30 секунд.
- Присоедините Neo (не Debug board!) USB-кабелем к машине с Linux-ом.
- Удерживайте AUX во время загрузки для получения доступа к меню.
- Переключите консоль на USB.
- Подключитесь к /dev/ttyACM0 терминальной программой на Linux-машине (возможно, потребуется сделать chown uucp.uucp /dev/ttyACM0 )
- Учтите, что доступ к /dev/ttyACM0 исчезнет во время загрузки, и в дальнейшем необходимо использовать сетевое устройство usb0.
- Вы увидите строку приглашения к загрузке.
- Установите задержку загрузчика переменных среды uboot в -1, если необходимо, чтобы меню появлялось при каждой загрузке.
Общие сведения
Модель GTA01 использует загрузчик u-boot, дополнительную информацию о котором можно найти по следующим адресам:
- http://www.denx.de/wiki/DULG
- http://www.gumstix.org/tikiwiki/tiki-index.php?page=U-Boot
- http://linuxdevices.com/articles/AT5085702347.html
Дополнительно к оригинальному u-boot в GTA01 реализованы следующие возможности:
- Загрузка устройства с флеши NAND с использованием S3C2410 Steppingstone.
- Поддержка S3C2410 NAND.
- Загрузка ПО через контроллер S3C2410 USB device controller.
- Отображение при загрузке логотипа или состояния процесса загрузки через S3C2410 framebuffer.
u-boot, однако, не поддерживает множество вещей, нужных для GTA01, например:
- Чтение ядра и образа initrd с карт памяти SD/Transflash.
- Загрузка ПО с вышеупомянутого контроллера S3C2410 USB device controller.
User:HaraldWelte сейчас работает над этими проблемами, и, скорее всего, большинство из них уже имеет какое-то решение.
Исходный код загрузчика
Патчи к загрузчику u-boot, созданные в рамках проекта Openmoko, можно найти тут: http://svn.openmoko.org/trunk/src/target/u-boot/patches/.
Извлеките исходники из архива и запустите сначала "make gta01bv3_config" (или "gta01bv2_config", или с любой другой имеющейся конфигурацией), затем "make". В результате должен появиться файл образа u-boot.bin, который необходимо записать в NAND-флеш устройства, используя либо существующий загрузчик, либо sjf2410-linux.
Программный код загрузчика
Последние версии собранных образов загрузчика можно найти по адресу http://downloads.openmoko.org/daily/ ; записывать в NAND их надо по смещению 0x00000000 (размер 0x30000).
Разработка загрузчика
QT2410
Если вы хотите заняться разработкой загрузчика на QT2410, легче будет не прошивать его во флеш-память, а работать с его образом, закаченным через USB в оперативную память.
Для этого надо отредактировать файл u-boot/include/configs/qt2410.h: изменить 32-ю строку с "if 0" на "if 1", и пересобрать образ: "make".
Получившийся образ "u-boot.bin" НЕ ПРЕДНАЗНАЧЕН для записи в NAND-флеш и может быть исполнен только в памяти, например с помощью s3c2410_boot_usb.
GTA01
Ситуация с работой с загрузчиком на самом устройстве GTA01 немного сложнее: во-первых у нас нет здесь NOR-флеши, во-вторых не существует возможности загрузиться ни с чего, кроме NAND. Следовательно, нет в нашем распоряжении и USB-загрузчика, как на QT2410.
Проблема заключается в том, что S3C2410 Steppingstone безусловно копирует первые 4 Кб с флеши в свою внутреннюю память, SRAM. Этот сегмент SRAM-памяти так же безусловно связывается с физическим адресом 0. Как это обойти?
Использование JTAG для загрузки из оперативной памяти
Так как же загрузиться из памяти? Используем JTAG / OpenOCD для:
- сброса и останова CPU на PC=0
> reset halt target halted in ARM state due to debug request, current mode: Supervisor cpsr: 0x400000d3 pc: 0x00000000 MMU: disabled, D-Cache: disabled, I-Cache: disabled
- загрузки небольшого кода для низкоуровневой инициализации тайминга SDRAM (переписывание первых 4 Кб SRAM у Steppingstone)
> load_binary /space/misc/gta01/u-boot.git/foo.bin 0 downloaded 332 byte in 0s 21899us
- установки точки останова по адресу 0x33f80000 (это означает, что код из предыдущего пункта завершил исполнение)
> bp 0x33f80000 4 hw breakpoint added at address 0x33f80000
- запуска кода до этой точки
> resume Target 0 resumed > Target 0 halted target halted in ARM state due to breakpoint, current mode: Supervisor cpsr: 0x600000d3 pc: 0x33f80000 MMU: disabled, D-Cache: disabled, I-Cache: enabled
- загрузки образа u-boot в память по адресу 0x33f80000
> load_binary /space/misc/gta01/u-boot.git/u-boot.bin 0x33f80000 downloaded 135692 byte in 6s 567264us
- продолжения исполнения кода
> resume Target 0 resumed
В этот момент подсветка экрана зажигается и мы видим примерно такое сообщение на серийной консоли:
U-Boot 1.1.6 (Jan 13 2007 - 23:44:23) DRAM: 128 MB NAND: 64 MiB *** Warning - bad CRC or NAND, using default environment In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 GTA01Bv2 #
Создание загрузочных образов
Для нормальной работы u-boot требуется загрузочные образы (такие как ядро, но также initrd и др.) в форме так называемых uImage. Чтобы создать этот формат из, например, образа ядра vmlinux, надо сделать следующее:
objcopy -O binary -R .note -R .comment -S vmlinux linux.bin gzip -9 linux.bin u-boot/tools/mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n "Kernel Image QT2410" -d linux.bin.gz uImage
Меню загрузки
На момент выпуска Phase-0 наша версия u-boot имеет возможность выводить на экран загрузочное меню.
Получение доступа к меню
Чтобы войти в меню, надо перед включением аппарата нажать и удерживать кнопку AUX button, а затем нажать кнопку включения питания.
Использование
Последовательными нажатиями кнопки AUX button можно ходить по пунктам меню. Для выбора нужного пункта необходимо нажать кнопку POWER.
Добавление пунктов в меню
Для добавления новых пунктов к существующему меню нужно установить соответствующие переменные среды. Общепринятый синтаксис таков: menu_<номер> <Название>: Команда-U-Boot
Например, следующая команда добавит пункт загрузочного меню, который будет переключать телефон в режим быстрой зарядки (autofast charging) и выключать подсветку экрана:
setenv menu_6 Autofast-Charge and Backlight Off: neo1973 charger autofast\; neo1973 backlight off saveenv
Информация загрузчика
Получение загрузочной информации
Строка приглашения загрузчика доступна либо через серийную консоль (см. Debug Board), либо как виртуальное серийное устройство USB (USB CDC_ACM); способ соединения зависит от значений переменных окружения stdin, stdout и stderr.
Независимо от того, используете ли вы usbtty или нет, первые несколько сообщений будут выведены в поток серийной консоли.
Загрузчик по умолчанию настроен на 3-секундное ожидание. Если в течение этого времени на stdin будет получено нажатие какой-либо клавиши, загрузка прерывается.
Использование usbtty
Простое подключение телефона в режиме u-boot к компьютеру с Linux должно привести к обнаружению устройства CDC ACM и появлению нового tty-устройства /dev/ttyACM0. Если этого не случилось, включите опцию ядра CONFIG_USB_ACM (Device Drivers -> USB support -> USB Modem (CDC ACM) support). (Инструкции для пользователей MacOS тут.)
Затем просто воспользуйтесь любым эмулятором терминала на выбор (minicom, cu, zc, screen ...), подключившись к вышеупомянутому /dev/ttyACM0. Для примера рассмотрим вариант с cu. Если у вас он не установлен (а в Debian он находится в пакете taylor-uucp), выполните обычную команду "apt-get install cu".
cu -l /dev/ttyACM0
Вам возможно понадобится
chown uucp.uucp /dev/ttyACM0
для установки соответствующих прав, даже если вы root.
Для начала проверьте, есть ли в списке USB-устройств ваш телефон (команда "lsusb"). Напоминаем, что устройство должно находиться в режиме u-boot.
- lsusb -d 1457:5119
Bus 005 Device 079: ID 1457:5119
Затем посмотрите набор возможных конфигурационных опций устройства:
# lsusb -v -d 1457:5119 Bus 005 Device 079: ID 1457:5119 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 2 Communications bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 16 idVendor 0x1457 idProduct 0x5119 bcdDevice 0.00 iManufacturer 1 Openmoko, Inc iProduct 2 Neo1973 Bootloader U-Boot 1.2.0-g6c7cac8c-dirty-moko3 iSerial 3 0000000 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 85 bNumInterfaces 3 bConfigurationValue 1 iConfiguration 4 TTY via USB bmAttributes 0xc0 Self Powered MaxPower 0mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 2 Communications bInterfaceSubClass 2 Abstract (modem) bInterfaceProtocol 1 AT-commands (v.25ter) iInterface 6 Control Interface CDC Header: bcdCDC 0.6e CDC Call Management: bmCapabilities 0x00 bDataInterface 1 CDC ACM: bmCapabilities 0x00 CDC Union: bMasterInterface 0 bSlaveInterface 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0010 1x 16 bytes bInterval 255 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 10 CDC Data bInterfaceSubClass 0 Unused bInterfaceProtocol 0 iInterface 5 Bulk Data Interface Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0010 1x 16 bytes bInterval 255 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0010 1x 16 bytes bInterval 255 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 254 Application Specific Interface bInterfaceSubClass 1 Device Firmware Update bInterfaceProtocol 1 iInterface 7 USB Device Firmware Upgrade Device Status: 0x0001 Self Powered
После этого вы можете запускать свою терминальную программу.
Наконец, если переменные среды установлены неверно, используйте соединённую с телефоном консоль (серийную или USB) для выполнения следующих команд:
GTA01Bv2 # setenv stderr usbtty GTA01Bv2 # setenv stdout usbtty GTA01Bv2 # setenv stdin usbtty
Пример сообщений u-boot
U-Boot 1.2.0-moko1 (Feb 16 2007 - 00:36:13) DRAM: 128 MB NAND: 64 MiB Found Environment offset in OOB.. Video: 640x480x8 31kHz 59Hz USB: S3C2410 USB Deviced In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 GTA01Bv3 #
Команды загрузчика
Автозагрузка
Автозагрузка по ходу своей работы исполняет команды, указанные в переменной окружения bootcmd. Вот конфигурация по умолчанию:
GTA01Bv3 # printenv bootcmd=setenv bootargs ${bootargs_base} ${mtdparts}; nand read.e 0x32000000 kernel; bootm 0x32000000
Коротко говоря, тут сказано, что будет производиться загрузка содержимого с раздела NAND kernel в память по адресу 0x32000000, а затем этому коду будет передано исполнение.
Среда окружения
Работа u-boot ориентирована на конфигурацию, постоянно хранимую в NAND-флеши. Для чтения, изменения и сохранения этих параметров используйте следующие команды:
GTA01Bv2 # printenv baudrate=115200 bootargs=rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8 dyntick=enable lpj=252416 usbtty=cdc_acm bootdelay=10 stdout=serial stderr=serial stdin=serial mtdparts=mtdparts=neo1973-nand:0x00030000(u-boot),0x0000c000(u-boot_env),0x00200000(kernel),0x00130000(splash),0x03c94000(rootfs) mtdids=nand0=neo1973-nand bootargs_base=rootfstype=jffs2 root=/dev/mtdblock4 console=ttySAC0,115200 console=tty0 loglevel=8 dyntick=enable lpj=252416 bootcmd=setenv bootargs ${bootargs_base} ${mtdparts}; nand read.e 0x32000000 kernel; bootm 0x32000000 pcf50606_int1=0x40 filesize=160C000 partition=nand0,0 mtddevnum=0 mtddevname=u-boot Environment size: 670/16380 bytes GTA01Bv3 # setenv bootdelay 10 GTA01Bv3 # printenv bootdelay bootdelay=10 GTA01Bv3 # saveenv Saving Environment to NAND... Erasing Nand...Writing to Nand... done GTA01Bv3 #
Обратите внимание: при установке нескольких команд в одну переменную, например bootcmd (см. подраздел "Автозагрузка" выше), символы ";" должны быть экранированы обратной косой чертой:
GTA01Bv3 # setenv bootcmd mmcinit\; ext2load mmc 0 0x32000000 uImage\; bootm 0x32000000
MMC/SD
Для инициализации (форматирования) карт MMC/SD используйте команду mmcinit.
GTA01Bv3 # mmcinit trying to detect SD Card... MMC found. Card desciption is: Manufacturer ID = 58d564 HW/FW Revision = 3 8 Product Name = 21DN!@X� Serial Number = 445303 Month = 5 Year = 2000 READ_BL_LEN=15, C_SIZE_MULT=7, C_SIZE=3197 size = 4208984064 GTA01Bv3 #
После этого на карте можно прочитать файловую систему ext2:
GTA01Bv3 # ext2ls mmc 0 <DIR> 1024 . <DIR> 1024 .. <DIR> 12288 lost+found 1544788 uImage
NAND
GTA01Bv3 # help nand nand info - show available NAND devices nand device [dev] - show or set current device nand read[.jffs2] - addr off size nand write[.jffs2] - addr off size - read/write `size' bytes starting at offset `off' to/from memory address `addr' nand erase [clean] [off size] - erase `size' bytes from offset `off' (entire device if not specified) nand bad - show bad blocks nand dump[.oob] off - dump page nand scrub - really clean NAND erasing bad blocks (UNSAFE) nand markbad off - mark bad block at offset (UNSAFE) nand biterr off - make a bit error at offset (UNSAFE)
Загрузка ядра из NAND
GTA01Bv3 # nand read 0x32000000 kernel NAND read: device 0 offset 212992, size 2097152 ... 2097152 bytes read: OK GTA01Bv3 # bootm 0x32000000 ## Booting image at 32000000 ... Image Name: Openmoko Kernel Image Neo1973 Created: 2007-02-15 23:54:18 UTC Image Type: ARM Linux Kernel Image (gzip compressed) Data Size: 1546258 Bytes = 1.5 MB Load Address: 30008000 Entry Point: 30008000 Verifying Checksum ... OK Uncompressing Kernel Image ... OK Starting kernel ...
Запись нового загрузчика в NAND
Следующие команды загружают файл u-boot.bin с карты MMC и записывают его во флеш-раздел загрузчика:
GTA01Bv3 # ext2load mmc 0 0x32000000 u-boot.bin GTA01Bv3 # nand erase u-boot GTA01Bv3 # nand write.e 0x32000000 u-boot ${filesize}
Запись ядра в NAND
Следующие команды загружают файл uImage с карты MMC и записывают его во флеш-раздел загрузчика:
GTA01Bv3 # ext2load mmc 0 0x32000000 uImage GTA01Bv3 # nand erase kernel GTA01Bv3 # nand write.e 0x32000000 kernel ${filesize}
Запись системного образа в NAND
Следующие команды загружают файл rootfs.jffs2 с карты MMC и записывают его в корневой (rootfs) флеш-раздел загрузчика:
GTA01Bv3 # ext2load mmc 0 0x32000000 rootfs.jffs2 GTA01Bv3 # nand erase rootfs GTA01Bv3 # nand write.e 0x32000000 rootfs ${filesize}
Заметьте, что это работает только для файловых систем размером меньше, чем свободная память выше адреса 0x32000000, что в случае общей памяти в 64Мб равняется 32Мб.
Специфичные команды Neo1973
Наша версия u-boot поддерживает несколько специфичных для Neo1973 команд:
GGTA01Bv4 # help neo1973 neo1973 neo1973 info - display phone information neo1973 power-off - switch off the phone neo1973 charger status - display charger status neo1973 charger autofast - enable automatic fast (500mA) charging neo1973 charger !autofast - disable automatic fast (500mA) charging neo1973 charger fast - enable fast (500mA) charging neo1973 charger off - disable charging neo1973 backlight (on|off) - switch backlight on or off neo1973 led num (on|off) - switch LED number 'num' on or off neo1973 vibrator (on|off) - switch vibrator on or off neo1973 gsm (on|off|version) - switch GSM Modem on/off or print firmware version neo1973 gps (on|off) - switch GPS system on or off neo1973 udc pullup (on|off) - switch USB device controller pull-up on or off
Задержки
Время задержки загрузочного меню может быть изменено так:
setenv boot_menu_timeout=[seconds?]
Также, изменив задержку самой загрузки, можно получить больше времени для манипуляций с u-boot:
setenv bootdelay=[seconds]
Выключение питания
Исполнив neo1973 power-off
вы сможете выключить устройство прямо из строки приглашения загрузчика.
Заряд батареи
За детальной информацией об основах зарядки телефона обратитесь к соответствующей странице.
Получение состояния батареи
Следующая команда покажет сам состояние зарядки устройства: neo1973 charger status
Возможны следующие состояния:
- idle - в данный момент не заряжается
- trickle - FIXME
- pre - Медленная зарядка на скорости 100мА/ч., штатный режим.
- fast_cccv - Быстрая зарядка, 500мА/ч., используя Constant-Current и Constant Voltage (Li-Ion), также известный как режим fast_cccv.
Запрещение загрузки батареи
Можно запретить зарядку батареи до следующей перезагрузки: neo1973 charger off
Быстрая зарядка
Исполнив neo1973 charger fast вы заставите устройство управления питанием (Power management unit, PMU) осуществить зарядку на повышенной скорости в 500мА/ч. Операция автоматически прекратится в случае перегрева аккумулятора или по возникновении другой нештатной ситуации.
Разрешение / Запрещение автоматической быстрой зарядки
Функция быстрой зарядки "Autofast" -- штатное свойство блока PCF50606 PMU. Это значит, что режим fast_cccv будет активизирован автоматически, если к телефону будет подсоединено зарядное устройство с соответствующими выходными характеристиками по вольтажу и аккумулятор в данный момент не перегрет.
WARNING: Такая зарядка потенциально опасна! Включайте её принудительно только в том случае, когда вы уверены, что от подключённого USB-шнура действительно можно получить не менее 500мА, например, когда зарядник подключён к мощному домашнему питанию, или к имеющему самостоятельное питание USB-хабу, или к компьютеру. Некоторые хабы и ноутбуки, однако, дают на выходе USB только 100мА и поэтому быструю зарядку не поддерживают. |
Включать/выключать autofast можно командами neo1973 charger autofast и neo1973 charger !autofast соответственно.
Подсветка
Подсветка экрана включается и выключается: neo1973 backlight on и neo1973 backlight off
Вибро
Встроенный в корпус вибратор включается и выключается: neo1973 vibrator on и neo1973 vibrator off
Специфичные команды S3C2410
GTA01Bv2 # help s3c2410 s3c2410 speed get - display current PLL speed config s3c2410 speed list - display supporte PLL speed configs s3c2410 speed set - set PLL speed GTA01Bv2 # s3c2410 speed list 50 MHz 101 MHz 202 MHz 266 MHz GTA01Bv2 # s3c2410 speed get FCLK = 202 MHz, HCLK = 101 MHz, PCLK = 50 MHz GTA01Bv2 # s3c2410 speed set 101 GTA01Bv2 # s3c2410 speed get FCLK = 101 MHz, HCLK = 50 MHz, PCLK = 50 MHz
Установка системного таймера на 266 МГц
Вы можете перенастроить блок PLL у S3C2410 на генерацию частоты процессора в 266МГц (вместо 200МГц) с помощью команд GTA01Bv2 # s3c2410 speed set 266 и GTA01Bv2 # s3c2410 speed set 202 соответственно.
WARNING: Старое оборудование (Phase 0 - GTA01Bv3) стабильно работает на частоте 266МГц только если к аппарату не подключены никакие внешние устройства, особенно отладочная панель через коннектор FPC |
TFTP на QT2410
Сетевой интерфейс cs8900a устройства QT2410 может быть использован для получения загрузочных образов по сети.
Для начала установите правильные значения переменных окружения ipaddr, serverip, ethaddr и netmaskk:
QT2410 # printenv ethaddr=00:01:02:03:04:05 netmask=255.255.255.0 ipaddr=192.168.100.100 serverip=192.168.100.1
Загрузка ядра по TFTP
QT2410 # tftpboot 0x32000000 *** Warning: no boot file name; using 'C0A86464.img' TFTP from server 192.168.100.1; our IP address is 192.168.100.100 Filename 'C0A86464.img'. Load address: 0x32000000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ########################################## done Bytes transferred = 1544788 (179254 hex)
Далее вы можете осуществить загрузку полученного образа:
QT2410# bootm 0x32000000
Обновление программного обеспечения устройства
Наша версия u-boot имеет также реализацию USB DFU. Это, в частности, может быть полезно для загрузки файлов и образов ядер для проведения быстрого тестирования.
Чтобы понять, поддерживает ли ваш u-boot эту функцию, посмотрите на вывод $ lsusb -v -d 1457:5119 в то время как телефон находится в режиме u-boot.
Если DFU поддерживается, вы увидите следующий блок текста ближе к концу вывода команды:
Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 254 Application Specific Interface bInterfaceSubClass 1 Device Firmware Update bInterfaceProtocol 1 iInterface 0
Далее читайте страницу dfu-util, где описан процесс обновления версий ПО телефона.
Загрузка через DFU
Для загрузки файла в память по адресу 0x32000000:
dfu-util -a 0 -D fileToLoad -R
После этого отправьте u-boot команду 'bootm 0x32000000', или 'bootelf 0x32000000', если это файл формата ELF.
Вот простой скрипт на Python, который загружает образ ELF, избегая при этом ошибки в ACM, приводящей к сбою при передаче больших пакетов.
#!/usr/bin/python import sys import os import time cmd1 = "neo backlight off\n" cmd2 = "bootelf 0x32000000\n" def output(tty, str): for x in str: tty.write(x) tty.flush() if len(sys.argv) == 2: print "Loading %s..." % sys.argv[1] loadfile = "dfu-util -a 0 -D %s -R" % sys.argv[1] os.system(loadfile) time.sleep(3) tty = open("/dev/ttyACM0", "a") output(tty, cmd1) output(tty, cmd2) tty.close() else: print "Usage: %s elffile" % sys.argv[0] print "" sys.exit(2)
Типовые проблемы
Проблемы соединения по USB
Однажды на компьютере, к которому был подключён Neo, во время соединения с использованием u-boot я стал получать следующие ошибки (в dmesg или /var/log/messages):
usb 2-1: device descriptor read/64, error -110 usb usb2: Controller not stopped yet!
У себя я решил эту проблему, выполнив на компьютере следующие команды -- выгрузил и заново загрузил в ядро модуль uhci_hcd. Обратите внимание, что если у вас клавиатура или мышь USB, выполнение этих команд может обернуться очевидными неприятностями. У меня были только устройства PS/2, так что я не проверял...
rmmod uhci_hcd ; modprobe uhci_hcd