|
|
  |
bootsplash for embedded, чтоб кустомеры пингвинов не пугались |
|
|
|
Oct 1 2012, 18:03
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743

|
Здравствуйте! Задача из категории навешивания бантиков, но решить надо. Нужно на время загрузки linux на плате с процессором ARM отображать на экране заставку. Для уменьшения времени загрузки u-boot был убран. На горизонте эксперимент с распакованным ядром. Параметры загрузки ядра похоронены в самом ядре. Самописный загрузчик инициализирует sdram, копирует ядро и запускает. Промежуточные результаты были следующие. Bootsplash, насколько я понял из описания, предполагает использование initrd, в котором он и хранит заставку, и который в embedded системе не нужен. Поэтому пока оставлен на десерт, хотя, возможно, есть варианты его использования в таких случаях. Если это так, то вопрос как именно. Пробовали вместо пингвина выводить свою картинку с разрешением во весь экран. Срабатывает, но в некоторый момент в левом верхнем углу экрана появляется черный прямоугольник с моргающим курсором. Пробовали framebuffer делать модулем, картинку выводить загрузчиком, но в этом случае перед запуском пользовательского приложения проскакивает момент замусоривания экрана. В общем, идеи еще есть, но цыплята заканчиваются. Как такая задача решается правильно?
|
|
|
|
|
Oct 2 2012, 05:25
|
Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205

|
У нас картинка выводится в uboot. В ядре, драйвер экрана модифицирован чтоб лишний раз экраном не моргать. Цитата Для уменьшения времени загрузки u-boot был убран. Если не секрет, а сколько у вас uboot грузился, что вы его ликвидировали? Цитата перед запуском пользовательского приложения проскакивает момент замусоривания экрана Вы с framebuffer напрямую работаете или через X-server какой-то? Может у вас еще какое-то приложение пытается что-то свое выводить, но для других параметров фрэймбуфера?
|
|
|
|
|
Oct 2 2012, 06:57
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(Drozd2 @ Oct 1 2012, 22:03)  Пробовали вместо пингвина выводить свою картинку с разрешением во весь экран. Срабатывает, но в некоторый момент в левом верхнем углу экрана появляется черный прямоугольник с моргающим курсором. Непонятно что за мигающий квадрат - курсор что-ли ? отключите поддержку консоли для фреймбуфера в ядре Цитата Location: -> Device Drivers -> Graphics support -> Console display driver support
< > Framebuffer Console support или погасите курсор скрыть # echo -e "\033[?25l" > /dev/tty1 снова показать # echo -e "\033[?25h" > /dev/tty1
Сообщение отредактировал sasamy - Oct 2 2012, 07:03
|
|
|
|
|
Oct 2 2012, 08:36
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743

|
Цитата Если не секрет, а сколько у вас uboot грузился, что вы его ликвидировали? Конечно секрет! Я поделюсь, только Вы никому не говорите. До счетчика bootdelay, который обнулен, на детектирование памяти и инициализацию ethernet уходит 3 секунды. Не фатально, но некрасиво. Делать картинку u-bootом пробовали. Соответственно, framebuffer модулем, и из драйвера убрали снятие тактирования lcd. Итог - замусоривание экрана. Ядро не выделяет память под экран и использует ее для своих задач. Отсюда и замусоривание. Были идеи выпилить из u-bootа все лишнее, картинку делать им, но, по моему, тут нет никакой разницы чем выводить заставку. Главное дать понять ядру или драйверу не трогать эту область памяти. Честно говоря, это первый опыт выпуска подобного изделия в свет. Поэтому, если можно, как для чайника, в каком файле и какой кусок надо поправить. У нас используется процессор at91sam9g45, соответственно, драйвер atmel_lcdfb.c. Цитата # echo -e "\033[?25l" > /dev/tty1 Попробую. Но не понятно, куда вставить эту строчку. В inittab похоже рано. В один из скриптов в init.d, возможно, поздно. Это всего лишь домыслы. Пока читаю и отвечаю. Пошел пробовать.
|
|
|
|
|
Oct 2 2012, 09:40
|
Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205

|
Цитата Главное дать понять ядру или драйверу не трогать эту область памяти Функция request_mem_region() умеет это делать. И затем область должна быть видна в /proc/iomem. Я мельком глянул этот драйвер, там области памяти резервируются, так что туда никто лишний туда писать не должен, может где-то доинициализировать чего-то забыли? Или где-то в probe драйвера забивать весь фреймбуфер одним цветом? А вообще, попробуйте загрузиться в "чистую" консоль, задав при загрузке init=/bin/sh и посмотрите есть ли артефакты, или нету. Если артефактов нету, то проблема где-то в userspace.
|
|
|
|
|
Oct 2 2012, 11:39
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(Drozd2 @ Oct 2 2012, 12:36)  Главное дать понять ядру или драйверу не трогать эту область памяти. Честно говоря, это первый опыт выпуска подобного изделия в свет. Поэтому, если можно, как для чайника, в каком файле и какой кусок надо поправить. У нас используется процессор at91sam9g45, соответственно, драйвер atmel_lcdfb.c. с атмеловским драйвером это несложно - указываете в параметрах ядра mem=63M, если у вас 64M физизически имеется и ядро не тронет последний мегабайт, далее если посмотреть инициализацию atmel_lcdfb http://lxr.free-electrons.com/source/drive...fb.c?a=arm#L921видно что драйверу можно указать заранее зарезервированную память, сделать это можно указав в структуре ее адрес http://lxr.free-electrons.com/source/arch/...es.c?a=arm#L975Код [2] = { .start = 0x73f00000, .end = 0x73f00000 + SZ_1M -1, .flags = IORESOURCE_MEM, }, Цитата Но не понятно, куда вставить эту строчку. В inittab похоже рано. В один из скриптов в init.d, возможно, поздно. Это всего лишь домыслы. Пока читаю и отвечаю. Пошел пробовать. если графическая консоль не нужна - просто отключите поддержку в ядре и все. Гасить курсор более пригодно если вы например выводите графику в своей программе и используете графическую консоль при этом. Наверняка есть и другие способы - посмотрите kernel-parameters.txt, может там что полезное найдете.
Сообщение отредактировал sasamy - Oct 3 2012, 07:09
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|