mini2440 заставка загрузки (u-boot) splash

mini2440 заставка загрузки (u-boot) splash

Сообщение setar » 12 июл 2010, 01:52

Исходная задача:
имеется контроллер mini2440 c установленным u-boot загрузчиком (не важно в NOR или NAND)
Допустим Вам захотелось в полный экран показывать картинку-заставку при работе u-boot (это время между включением и началом загрузки ядра ~ 7 сек)
Сразу скажу что с началом загрузки ядра картинку тоже можно показывать, причем в ядре даже движущуюся.
Если говорить о анимации по факту можно вывести две картинки одну при старте загрузчика, другую непосредственно до начала старта ядра (через 3 сек.)

итак как это делается:

  1. подключаем mini2440 serial и USB портами
  2. получаем в одной консоли доступ на mini2440 в другой работаем по конфигурации и сборке на x86 линуксе
  3. кросс компилятор для архитектуры armv4tl-softfloat-linux-gnueabi должен быть настроен в x86 линуксе (читай предыдущие статьи как это сделать)
  4. получаем текущий репозитарий u-boot и устанавливаем окружение кросс компиляции.
    cd ~
    mkdir uboot ; cd uboot
    git clone git://repo.or.cz/u-boot-openmoko/mini2440.git
    export CROSS_COMPILE=armv4tl-softfloat-linux-gnueabi-
    cd mini2440
  5. качаем из вложения патч, выкладываем в корне папки сборки u-boot и накладываем патч
    calculate mini2440 # patch -p1 < ./u-boot-splash.patch
    patching file board/mini2440/mini2440.c
    patching file drivers/video/Makefile
    patching file drivers/video/cfb_console.c
    patching file include/configs/mini2440.h

    для успешной сборки удостоверьтесь что новый файл видеодрайвера из архива (drivers/video/s3c2440_fb.c) лег в нужую папку
    u-boot-splash.patch.zip
    (4.22 КиБ) Скачиваний: 0
  6. собираем модифицированный u-boot :
    make mini2440_config
    make all
  7. включаем mini2440 (любой режим NOR/NAND в котором уже есть обычный u-boot) загружаемся в u-boot консоль - прерываем загрузку
  8. меняем переменную окружения указывающую как разбивать NAND разделы
    MINI2440 # setenv mtdparts mtdparts=mini2440-nand:384k@0(u-boot),128k(u-boot_env),5m(kernel),256k(splash),-(rootfs)
    MINI2440 # mtdparts

    device nand0 <mini2440-nand>, # parts = 5
    #: name size offset mask_flags
    0: u-boot 0x00060000 0x00000000 0
    1: u-boot_env 0x00020000 0x00060000 0
    2: kernel 0x00500000 0x00080000 0
    3: splash 0x00040000 0x00580000 0
    4: rootfs 0x07a40000 0x005c0000 0

    active partition: nand0,0 - (u-boot) 0x00060000 @ 0x00000000

    defaults:
    mtdids : nand0=mini2440-nand
    mtdparts: <NULL>

  9. заливаем с хоста новый образ загрузчика
    dfu-util -a 0 -D ./u-boot.bin
    MINI2440 # DFU: Switching to DFU Mode
    Starting DFU DOWNLOAD to RAM (0x32000000)
  10. на контроллере стираем место под старый загрузчик и заменяем его новым
    MINI2440 # nand erase u-boot
    NAND erase: device 0 offset 0x0, size 0x60000
    Erasing at 0x40000 -- 100% complete.
    OK

    MINI2440 # nand write 0x32000000 u-boot
    NAND write: device 0 offset 0x0, size 0x60000
    393216 bytes written: OK
  11. можно перегружать mini2440.
    пока в разделе splash нет требуемой картинки на экран будет выведена маленькая иконка пингвинчика :)
    linux_logo.png
    linux_logo.png (7.28 КиБ) Просмотров: 7920
  12. после перезагрузки контроллер ругнется на отсутствие правильных переменных окружения.
    восстановим их:
    MINI2440 # dynpart
    MINI2440 # dynenv set u-boot_env
    MINI2440 # saveenv
  13. теперь загрузим на контроллер правильную (230x320x24bit BMP) картинку:
    RoboForum_Logo_240_320.bmp.zip
    (11.63 КиБ) Скачиваний: 0

    dfu-util -a 0 -D ./RoboForum_Logo_240_320.bmp

    MINI2440 # bmp info 0x32000000
    NAND read: device 0 offset 0x580000, size 0x40000
    262144 bytes read: OK
    MINI2440 # bmp info 32000000
    Image size : 240 x 320
    Bits per pixel: 24
    Compression : 0

  14. проверим что она вообще может отобразиться:
    MINI2440 # bmp display 0x32000000
    RoboForum_Logo_240_320.png
    RoboForum_Logo_240_320.png (48.42 КиБ) Просмотров: 7981

  15. если всё в порядке записываем картинку в раздел splash (NAND)
    MINI2440 # nand write 0x32000000 splash
    готово


-- все косяки которые я словил и исправил допишу завтра --
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение setar » 12 июл 2010, 13:18

2картинки:

размер раздела splash 256k (кратно страницам NAND)
а размер картинки 225k (240x320x3) что позволяет сохранить в том же разделе ещё одну
небольшую картинку размером 240x44 | 200x52 | 100x105 и вывести её чуть позже основной,
при загрузке (спустя 3 сек от старта, параметр bootdelay)


dfu-util -a 0 -D ./RoboForum_Logo_240_320.bmp
MINI2440 # cp.b 32000000 31000000 38400 // сохранение pix1 в другое место в RAM
dfu-util -a 0 -D ./загрузка.bmp
MINI2440 # cp.b 32000000 31038400 7c00 // сохранение pix2 со смещением
MINI2440 # nand erase splash
MINI2440 # nand write 31000000 splash // сохранение pix1+pix2 в NAND
MINI2440 # setenv splashimage nand read 0x32000000 splash\; bmp display 0x32000000
MINI2440 # setenv bootcmd bmp display 0x32038400 50 270\; ${bootcmd}
MINI2440 # saveenv
Вложения
загрузка.gif
загрузка.gif (375 байт) Просмотров: 7833
загрузка.bmp.zip
(672 байт) Скачиваний: 0
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение Resident » 12 июл 2010, 13:53

А картинку для 7го экранчика получится вставить?
там вродя как разрешение поболее будет, и размер соответственно...
Любой прибор, защищённый плавким предохранителем, сможет защитить этот предохранитель, сгорев первым.
Resident
 
Сообщения: 167
Зарегистрирован: 14 июн 2010, 17:19
прог. языки: Qt/C/C++

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение setar » 12 июл 2010, 14:26

изменения которые сделаны в patch (очень кратко)

в конфугурационном файле (include/configs/mini2440.h) указано что :
бинарный размер загрузчика увеличится и появляется дополнительный раздел
Код: Выделить всё
#define CFG_UBOOT_SIZE          0x60000
#define CFG_MY_ENV_OFFSET       0X60000
#define MTPDARTS_DEFAULT                "mtdparts=mtdparts=mini2440-nand:384k@0(u-boot),128k(u-boot_env),5m(kernel),256k(splash),-(rootfs)"                                                               
        "mtdparts=mtdparts=mini2440-nand:384k@0(u-boot),128k(u-boot_env),5m(kernel),256k(splash),-(rootfs)\0" \     


нужно использовать видео
Код: Выделить всё
#define CONFIG_VIDEO                                                                                                                                                                                     
#define CONFIG_VIDEO_S3C2440                                                                                                                                                                             
#define CONFIG_CFB_CONSOLE                                                                                                                                                                               
#define CONFIG_CMD_BMP                                                                                                                                                                                   
//#define CONFIG_VIDEO_BMP_LOGO                                                                                                                                                                           
//#define CONFIG_VIDEO_BMP_GZIP                                                                                                                                                                           
                                                                                                                                                                                                         
#define VIDEO_VISIBLE_COLS              240                                                                                                                                                               
#define VIDEO_VISIBLE_ROWS              320                                                                                                                                                               
#define VIDEO_PIXEL_SIZE                2                                                                                                                                                                 
                                                                                                                                                                                                         
#define CONFIG_VIDEO_LOGO                                                                                                                                                                                 
#define CONFIG_SPLASH_SCREEN                                                                                                                                                                             
#define CFG_VIDEO_LOGO_MAX_SIZE         (240*320+1024+100)                                                                                                                                               
                                                                                                                                                                                                         
#define CONFIG_VGA_AS_SINGLE_DEVICE                                                                                                                                                                       
//#define VIDEO_FB_16BPP_PIXEL_SWAP                                                                                                                                                                       
#define VIDEO_KBD_INIT_FCT      0                                                                                                                                                                         
//#define VIDEO_TSTC_FCT          serial_tstc                                                                                                                                                             
//#define VIDEO_GETC_FCT          serial_getc                                                                                                                                                             
#define LCD_VIDEO_ADDR                  0x33d00000

краткие пояснения по видео параметрам
  • используется видеодрайвер CONFIG_VIDEO_S3C2440 (drivers/video/s3c2440_fb.c), оригинально использовался драйвер 2410, там малость кривая инициализация LCD (циклическая перезагрузка)
  • используются команды работы с .bmp CONFIG_CMD_BMP
  • используется логотип пингвинчик при отсутствии splash - CONFIG_VIDEO_LOGO (include/linux_logo.h)
    можно вместо linux_logo использовать bmp_logo.h (включение опции CONFIG_VIDEO_BMP_LOGO)
    к слову сказать в каталоге tools лежат инструменты ( easylogo & bmplogo) для изменения и этих картиночек, я особого смысла в этом не увидел, хоть и эксперементировал
  • самая интересная здесь опция CONFIG_SPLASH_SCREEN - позволяет отрабатывать переменную окружения splashimage сразу после загрузки
  • далее идут параметры устройства, вроде бы они не особо нужны но лучше их оставить. параметр LCD_VIDEO_ADDR важный и обязательный

немного удобств запускаются как # run uboot_reflash и # run splash_reflash
это я просто утомился при отладе много раз набирать длинные строки стирания nand и копирования в него из памяти залитых образов
Код: Выделить всё
        "uboot_reflash=nand erase u-boot\; nand write 0x32000000 u-boot\0" \                                                                                                                             
        "splash_reflash=nand erase splash\; nand write 0x32000000 splash\0" \                                                                                                                             


автопоказ splash картинки
здесь обращаю вимание на грабли по которым прошел - по непонятной мне причине показать BMP файл из NAND нельзя, требуется предварительное копирование в RAM
Код: Выделить всё
        "splashimage=nand read 0x32000000 splash\; bmp display 0x32000000\0" \                                                                                                                           


про видеодрайвер drivers/video/s3c2440_fb.c рассказывать особо не буду, он копия drivers/video/s3c2410_fb.c из которого удалено лишнее и подправлен размер видеопамяти (из за него и происходила перезагрузка)

в файле конфигурации борды board/mini2440/mini2440.c
стоит обратить внимание на следующие изменения:
здесь вторая строчка включает подсветку экрана
Код: Выделить всё
        gpio->GPGUP = ((1 << 15) -1) // disable pullups for all pins                                                                                                                                     
                    & ~(1 << 4) // Pull-up lcd                                                                                                                                                           
                    ;


полностью переписал параметры дисплея, то что было поставил в ремарку для сохранения связи по названиям переменных
а вот сами переменный переназвал, ибо в оригинале нихрена не понятно что это :)
оригинальные параматры картинку помещают на несколько строк ниже и правее (картинка сдвинута вправо/низ )
Код: Выделить всё
//#define LCD_XSIZE_TFT_240320  (240)                                                                                                                                                                     
//#define LCD_YSIZE_TFT_240320  (320)
                                                                                                                                                                                                   
//Timing parameter for NEC3.5"                                                                                                                                                                           
//#define VBPD_240320             (3)                                                                                                                                                                       
//#define VFPD_240320             (10)                                                                                                                                                                     
//#define VSPW_240320             (1)                                                                                                                                                                       
                                                                                                                                                                                                         
//#define HBPD_240320             (5)                                                                                                                                                                       
//#define HFPD_240320             (2)                                                                                                                                                                       
//#define HSPW_240320             (36)                                                                                                                                                                     
                                                                                                                                                                                                         
//#define CLKVAL_TFT_240320       (3)                                                                                                                                                                       
//FCLK=101.25MHz,HCLK=50.625MHz,VCLK=6.33MHz                                                                                                                                                             
                                                                                                                                                                                                       
                                                                                                                                                                                                         
#define LCD_WIDTH               (240)                                                                                                                                                                     
#define LCD_HEIGHT              (320)                                                                                                                                                                     
                                                                                                                                                                                                         
#define LCD_UPPER_MARGIN        (1)                                                                                                                                                                       
#define LCD_LOWER_MARGIN        (1)                                                                                                                                                                       
#define LCD_VSYNC_LEN           (1)                                                                                                                                                                       
                                                                                                                                                                                                         
#define LCD_RIGHT_MARGIN        (1)                                                                                                                                                                       
#define LCD_LEFT_MARGIN         (1)                                                                                                                                                                       
#define LCD_HSYNC_LEN           (27)                                                                                                                                                                     
                                                                                                                                                                                                         
#define CLKVAL_TFT_240320       (1)


понятная инициализация LCD с новыми названиями переменных
Код: Выделить всё
    lcd->LCDCON1 = 0x00000378; /* CLKVAL=4, BPPMODE=16bpp, TFT, ENVID=0 */                                                                                                                               
    lcd->LCDCON2 = (LCD_UPPER_MARGIN << 24) | ((LCD_HEIGHT - 1) << 14) | (LCD_LOWER_MARGIN << 6) | (LCD_VSYNC_LEN << 0);                                                                                 
    lcd->LCDCON3 = (LCD_RIGHT_MARGIN << 19) | ((LCD_WIDTH  - 1) <<  8) | (LCD_LEFT_MARGIN << 0);                                                                                                         
    lcd->LCDCON4 = (MVAL<<8) | (LCD_HSYNC_LEN << 0);                                                                                                                                                     
    lcd->LCDCON5 = 0x00000f09;


ну и на последок не особо мудря тупо закомментировал вывод строки версии в drivers/video/cfb_console.c
она всё равно не помещается и выглядит коряво
Код: Выделить всё
//     sprintf (info, " %s", &version_string);


Добавлено спустя 4 минуты 16 секунд:
Resident писал(а):А картинку для 7го экранчика получится вставить?
там вродя как разрешение поболее будет, и размер соответственно...

для 7" экрана нужно вносить соответствующие изменения во всем вышеописанным файлам, для этого нужно пересчитывать все адраса/смещения/ размеры и параметры инициализации дисплея.
это не очень сложно но нужно иметь рабочее устройство на руках.
может кто то решит заняться, я проконсультирую.
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение Resident » 12 июл 2010, 19:54

Вот доделаю, что начал, надеюсь рано или поздно все-таки доделаю, и займусь :)
Любой прибор, защищённый плавким предохранителем, сможет защитить этот предохранитель, сгорев первым.
Resident
 
Сообщения: 167
Зарегистрирован: 14 июн 2010, 17:19
прог. языки: Qt/C/C++

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение setar » 14 июл 2010, 00:29

нашел способ как съэкономить 128k памяти NAND:
нет смысла держать картинку в 24bpp цветах когда дисплей отображает всего 16bpp
нашел как сохранить картинку непосредственно в формате в котором оно в видеопамять ложиться.

для работы нужна пара скриптов:
imghs.pl
Код: Выделить всё
#!/usr/bin/perl                                                                                                                                                                                           
$filename = shift @ARGV;                                                                                                                                                                                 
system("pngtopnm $filename | ppmtorgb3");                                                                                                                                                                 
for ("red", "grn", "blu") {                                                                                                                                                                               
    open(FILE,"noname.$_") || die "noname.$_";                                                                                                                                                           
    $f = join("",<FILE>);                                                                                                                                                                                 
    close FILE;                                                                                                                                                                                           
    unlink("noname.$_");                                                                                                                                                                                 
    $f =~ s/^P5\s+(\d+)\s+(\d+)\s+(\d+)\s//s;                                                                                                                                                             
    ($w,$h,$p) = ($1,$2,$3);                                                                                                                                                                             
    $p{$_} = $f;                                                                                                                                                                                         
}                                                                                                                                                                                                         
print STDERR "$w x $h ($p)\n";                                                                                                                                                                           
for ($i = 0; $i != $w*$h; $i++) {                                                                                                                                                                         
    $r = unpack("C",substr($p{"red"},$i,1));                                                                                                                                                             
    $g = unpack("C",substr($p{"grn"},$i,1));                                                                                                                                                             
    $b = unpack("C",substr($p{"blu"},$i,1));                                                                                                                                                             
    $v = ($r >> 3) << 11 | ($g >> 2) << 5 | ($b >> 3);                                                                                                                                                   
    print pack("v",$v);                                                                                                                                                                                   
}


и скрипт splash_upload:
Код: Выделить всё
#!/bin/bash                                                                                                                                                                                               
                                                                                                                                                                                                         
MINI2440_TTY=/dev/ttyUSB0                                                                                                                                                                                 
FILENAME=$1                                                                                                                                                                                               
                                                                                                                                                                                                         
if [$1 == ""] ; then                                                                                                                                                                                     
    echo "usage: splash_upload file_240_320_16bpp.png";                                                                                                                                                   
    exit;                                                                                                                                                                                                 
fi                                                                                                                                                                                                       
                                                                                                                                                                                                         
./imghs.pl $FILENAME | gzip -9 > bootscreen.splash                                                                                                                                                       
dfu-util -a 0 -D ./bootscreen.splash                                                                                                                                                                     
echo "nand erase splash" > $MINI2440_TTY                                                                                                                                                                 
sleep 1                                                                                                                                                                                                   
echo "nand write 0x32000000 splash " > $MINI2440_TTY                                                                                                                                                     
sleep 1                                                                                                                                                                                                   
echo "setenv splashimage nand read 0x32000000 splash \; unzip 0x32000000 0x33d00000 0x25800" > $MINI2440_TTY                                                                                             
sleep 1                                                                                                                                                                                                   
echo "saveenv" > $MINI2440_TTY                                                                                                                                                                           
sleep 1                                                                                                                                                                                                   
echo "unzip 0x32000000 0x33d00000 0x25800" > $MINI2440_TTY


Примечательно во втором скрипте используется автоматическая передача команд на mini2440 (пока без контроля)

в приложении готовый образ загрузчика с уменьшенным до 128k размером раздела splash (реально используется не более 32k) но меньше одной страницы 128k не выделить.
u-boot-1.1.6.tar.bz2
(1.58 МиБ) Скачиваний: 0


скрипт для автоматической смены u-boot (используйте на свой страх и риск только при наличии JTAG!)
uboot_reflash:
Код: Выделить всё
#!/bin/bash                                                                                                                                                                                               
                                                                                                                                                                                                         
MINI2440_TTY=/dev/ttyUSB0                                                                                                                                                                                 
FILENAME="u-boot.bin"                                                                                                                                                                                     
                                                                                                                                                                                                         
                                                                                                                                                                                                         
dfu-util -a 0 -D $FILENAME                                                                                                                                                                               
#echo "" > $MINI2440_TTY                                                                                                                                                                                 
#sleep 1                                                                                                                                                                                                 
echo "setenv mtdparts mtdparts=mini2440-nand:384k@0(u-boot),128k(env),5m(kernel),128k(splash),-(root)" > $MINI2440_TTY                                                                                   
sleep 1                                                                                                                                                                                                   
echo "mtdparts" > $MINI2440_TTY                                                                                                                                                                           
sleep 1                                                                                                                                                                                                   
echo "nand erase u-boot" > $MINI2440_TTY                                                                                                                                                                 
sleep 1                                                                                                                                                                                                   
echo "nand write 0x32000000 u-boot" > $MINI2440_TTY                                                                                                                                                       
sleep 1                                                                                                                                                                                                   
echo "reset" > $MINI2440_TTY                                                                                                                                                                             
sleep 8                                                                                                                                                                                                   
echo "dynpart" > $MINI2440_TTY                                                                                                                                                                           
sleep 1                                                                                                                                                                                                   
echo "dynenv set u-boot_env" > $MINI2440_TTY                                                                                                                                                             
sleep 1                                                                                                                                                                                                   
echo "saveenv" > $MINI2440_TTY                                                                                                                                                                           
sleep 1                                                                                                                                                                                                   
echo "reset" > $MINI2440_TTY


смена загрузчика просто запуском скрипта после двух перезагрузок получаем результат

смена картинки вызовом ./splash_upload ./картинка_240_320_16bpp
после перезагрузки получаем результат

в принципе есть возможность съэкономить ещё 128k если убрать опции
Код: Выделить всё
#define CONFIG_CFB_CONSOLE                                                                                                                                                                                                                                                                                                                                               
#define CONFIG_VIDEO_LOGO                                                                                                                                                                                 
#define CONFIG_SPLASH_SCREEN                                                                                                                                                                             
#define CFG_VIDEO_LOGO_MAX_SIZE         (240*320+1024+100)

но тогда нужно перемещать процедуру инициализации lcd и некоторые процедуры из SPLASH_SCREEN в инициализацию борды.
фрейм буфер в принципе не нужен тк пишем прямо в видеопамять.
но так кодить на низком уровне мне сейчас лень, если пойдет борьба за свободное пространство NAND нужно помнить этот путь.
Последний раз редактировалось Vooon 14 июл 2010, 00:45, всего редактировалось 1 раз.
Причина: [code=perl,bash,cpp] эвристика не хочет работать :(
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение rotax » 20 авг 2010, 22:25

setar писал(а):MINI2440 # setenv mtdparts mtdparts=mini2440-nand:384k@0(u-boot),128k(u-boot_env),5m(kernel),256k(splash),-(rootfs)
MINI2440 # mtdparts

384k@0(u-boot) как я понимаю это размер раздела под загрузчик, т.е. 384k, что означает @0?
у меня загрузчик получился размером 962412, это нормально?
setar писал(а):[*] заливаем с хоста новый образ загрузчика
dfu-util -a 0 -D ./u-boot.bin

при этой команде у меня появляется ошибка:
dfu-util - (C) 2007-2008 by OpenMoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTLY

dfu-util does currently only support DFU version 1.0

Opening USB Device 0x0000:0x0000...
Claiming USB DFU Runtime Interface...
Determining device status: state = dfuERROR, ststus = 14
dfuERROR, clearing status
not at least 2 device changes found?!?
Opening USB Device...
Found Runtime: [0x1457:0x511b] devnum=3, cfg=0, intf=0, alt=0 name="Control Interface"
Claiming USB DFU Interface...
Cannot claim interface: could not claim interface 2: Device or resource busy

В чем может быть проблемма? Linux прекрасно видит мини в vbox как MINI2440 S3C2440 Bootloader U-Boot 1.3.2-mini2440
Аватара пользователя
rotax
 
Сообщения: 43
Зарегистрирован: 10 июн 2010, 23:31
Откуда: Краснодар
Skype: rotaxb
прог. языки: C
ФИО: Александр

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение setar » 20 авг 2010, 22:49

@0 это начиная с адреса 0, дальше разделы по порядку
длинна Вашего загрузчика чрезмерно большая, из за чего ?
нужно менять резервирование памяти под него (анализируйте мои патчи, там в нескольких местах меняется) но лучше уменьшить

причину почему нельзя писать прямо в канал alt2 я не нашел, у меня так же. делал через буфенрую память (alt0)
P.S. судя по "could not claim interface 2" у вас параметр -a 2
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение rotax » 20 авг 2010, 22:56

почему такой размер получился не знаю :) собирал строго по вашему мануалу, дважды пересобирал, результат тот же.
какой у вас размер загрузчика получился?
setar писал(а):нужно менять резервирование памяти под него (анализируйте мои патчи, там в нескольких местах меняется) но лучше уменьшить причину почему нельзя писать прямо в канал alt2 я не нашел, у меня так же. делал через буфенрую память (alt0)
P.S. судя по "could not claim interface 2" у вас параметр -a 2

:oops: а можно про резервирование и патчи более простым языком описать?
Аватара пользователя
rotax
 
Сообщения: 43
Зарегистрирован: 10 июн 2010, 23:31
Откуда: Краснодар
Skype: rotaxb
прог. языки: C
ФИО: Александр

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение setar » 21 авг 2010, 00:11

отвечу завтра , сейчас миньки с собой нету, а эмуль на серверах не хочу запускать - они восстановлением занимаются после BlackOUT

Добавлено спустя 3 минуты 12 секунд:
кстати я пока писал статью всю работу проделал, вам компилить загрузчик надобности нет, всё лежит тут http://projects.roboforum.ru/mini2440/u-boot/
Вам нужен u-boot.bin.lcdsplash он получился чуть больше 256к поэтому пришлось увеличивать размер до ближайшей кратной страницы (384k)
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение rotax » 22 авг 2010, 19:39

setar писал(а):... размер картинки 225k (240x320x3) что позволяет сохранить в том же разделе ещё одну
небольшую картинку размером 240x44 | 200x52 | 100x105 и вывести её чуть позже основной...

почему именно такие разрешения? допустим 96х30 или иное нельзя использовать как 2-е изображение?
setar писал(а):MINI2440 # cp.b 32000000 31000000 38400 // сохранение pix1 в другое место в RAM
MINI2440 # cp.b 32000000 31038400 7c00 // сохранение pix2 со смещением
MINI2440 # setenv bootcmd bmp display 0x32038400 50 270\; ${bootcmd}


откуда взялись цифры 38400 и 7с00? как я понимаю это размер картинки в битах переведенный в hex?!
50 270 - это координаты смещения картинки?
как отключить вывод 2-й картинки?
Аватара пользователя
rotax
 
Сообщения: 43
Зарегистрирован: 10 июн 2010, 23:31
Откуда: Краснодар
Skype: rotaxb
прог. языки: C
ФИО: Александр

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение setar » 22 авг 2010, 20:31

можно любой размер картинки не превышающий свободного места (0x40000 - (размер картинки 1) )
кстати никто не мешает картинку 1 сделать меньше

240*320*3 = 230400 = 0x38400
0x40000-0x38400=0x7c00
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение rotax » 26 авг 2010, 07:56

Наконец то доввел до ума загрузчик.
1. Из под виртуалки почему то не работали dfu-utils, с хостового линукса заливал образы без проблемм
2. Необходимо неомного доработать статью, после комманды dynpart уменьшается splash, см. ниже

setar писал(а):[*] меняем переменную окружения указывающую как разбивать NAND разделы
MINI2440 # setenv mtdparts mtdparts=mini2440-nand:384k@0(u-boot),128k(u-boot_env),5m(kernel),256k(splash),-(rootfs)
MINI2440 # mtdparts
device nand0 <mini2440-nand>, # parts = 5
#: name size offset mask_flags
0: u-boot 0x00060000 0x00000000 0
1: u-boot_env 0x00020000 0x00060000 0
2: kernel 0x00500000 0x00080000 0
3: splash 0x00040000 0x00580000 0
4: rootfs 0x07a40000 0x005c0000 0

active partition: nand0,0 - (u-boot) 0x00060000 @ 0x00000000

defaults:
mtdids : nand0=mini2440-nand
mtdparts: <NULL>

[*] заливаем с хоста новый образ загрузчика dfu-util -a 0 -D ./u-boot.bin
[*] на контроллере стираем место под старый загрузчик и заменяем его новым MINI2440 # nand erase u-boot
MINI2440 # nand write 0x32000000 u-boot
[*] после перезагрузки контроллер ругнется на отсутствие правильных переменных окружения.
восстановим их:
MINI2440 # dynpart
после этой комманды проверяем таблицу разделов, т.к. она у меня уменьшила в 2 раза размер splash, если необходимо востанавливаем
MINI2440 # setenv mtdparts mtdparts=mini2440-nand:384k@0(u-boot),128k(u-boot_env),5m(kernel),256k(splash),-(rootfs)
MINI2440 # dynenv set u-boot_env
MINI2440 # saveenv
Остальное без изменений
Аватара пользователя
rotax
 
Сообщения: 43
Зарегистрирован: 10 июн 2010, 23:31
Откуда: Краснодар
Skype: rotaxb
прог. языки: C
ФИО: Александр

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение setar » 26 авг 2010, 11:28

статья правильная, просто Вы вырывали из нее куски
ибо то что делает dynpart (размеры разбиения) в явном виде прописаны в исходниках u-boot и в приложенном патче это правится.
#define CONFIG_EXTRA_ENV_SETTINGS \
"usbtty=cdc_acm\0" \
- "mtdparts=mtdparts=mini2440-nand:256k@0(u-boot),128k(env),5m(kernel),-(root)\0" \
+ "mtdparts=mtdparts=mini2440-nand:384k@0(u-boot),128k(u-boot_env),5m(kernel),256k(splash),-(rootfs)\0" \


и
unsigned int dynpart_size[] = {
- CFG_UBOOT_SIZE, 0x20000, 0x500000, 0xffffffff, 0 };
+ CFG_UBOOT_SIZE, 0x20000, 0x500000, 0x40000 ,0xffffffff, 0 };
char *dynpart_names[] = {
- "u-boot", "u-boot_env", "kernel", "rootfs", NULL };
+ "u-boot", "u-boot_env", "kernel", "splash", "rootfs", NULL };
Аватара пользователя
setar
Site Admin
 
Сообщения: 10989
Зарегистрирован: 04 окт 2004, 12:58
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко

Re: mini2440 заставка загрузки (u-boot) splash

Сообщение saniok » 10 сен 2010, 12:54

Всем привет!
Если кому интересно я переделал патч под 7" жки. Тестировал на своем. Вроде все работает корректно.
Обращаю ваше внимание что изменения так же есть в файле драйвера видика. т.е. его тоже надо переписывать из архива.

Патч правда правил ручками на основе изменений что сделал в своих файлах но вроде не ошибся. Но если что пишите подправлю :-) Проверять наложение было лениво :-)

Всем удачи!
Вложения
u-boot-splash_a70.zip
патч u-boot для mini2440 c жк a70 (7")
(4.09 КиБ) Скачиваний: 0
saniok
 
Сообщения: 4
Зарегистрирован: 06 сен 2010, 11:29
Откуда: Минск
Skype: shurilnik

След.

Вернуться в mini2440

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

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