ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: Загрузочная MicroSD карта с Linux  (Прочитано 6615 раз)

0 Пользователей и 1 Гость просматривают эту тему.

dm2601

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 3
Загрузочная MicroSD карта с Linux
« : 13 Ноября, 2012, 01:28:44 »

Я пытался записать загрузочную SD карту с Линуксом, используя LTIB от Freescale. Пробился 2 вечера над одной проблемой и хочу поделиться решением, которое мне в итоге помогло.
Следуя инструкции документа i.MX28 Linux BSP User’s Guide я установил в Ubuntu 10.10 linux target image builder от freescale, запустил конфигуратор ядра а затем запустил построение ядра и корневой файловой системы и записал их в карту. С помощью этой карты я попытался загрузить Тион Про28 с положением перемычек 1001.
Через ком порт пошли строчки лога загрузки ядра, но закончился лог не предложением ввода логина, а вот так:

mmc0: new high speed SD card at address b368                                   
mmcblk0: mmc0:b368 uSD   1.91 GiB (ro)                                         
 mmcblk0:                                                                       
TCP cubic registered                                                           
NET: Registered protocol family 17                                             
can: controller area network core (rev 20090105 abi 8)                         
NET: Registered protocol family 29                                             
can: raw protocol (rev 20090105)                                               
 p1 p2 p3                                                                       
mxs-rtc mxs-rtc.0: setting system clock to 1970-01-01 00:03:50 UTC (230)       
VFS: Cannot open root device "mmcblk0p3" or unknown-block(179,3)               
Please append a correct "root=" boot option; here are the available partitions:
b300         2010112 mmcblk0 driver: mmcblk                                     
  b301           35681 mmcblk0p1                                               
  b302           35712 mmcblk0p2                                               
  b303         1938368 mmcblk0p3                                               
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,3)
Backtrace:                                                                     
[<c00344a8>] (dump_backtrace+0x0/0x114) from [<c03c9698>] (dump_stack+0x18/0x1c)
 r7:c047ba5e r6:00008000 r5:c75d1000 r4:c0536898                               
[<c03c9680>] (dump_stack+0x0/0x1c) from [<c03c9714>] (panic+0x78/0xf4)         
[<c03c969c>] (panic+0x0/0xf4) from [<c000902c>] (mount_block_root+0x1d8/0x218) 
 r3:00000000 r2:00000001 r1:c7c27f60 r0:c047bb05                               
[<c0008e54>] (mount_block_root+0x0/0x218) from [<c0009130>] (mount_root+0xc4/0x)
[<c000906c>] (mount_root+0x0/0xfc) from [<c00092d4>] (prepare_namespace+0x16c/0)
 r5:c0029a29 r4:c0535c20                                                       
[<c0009168>] (prepare_namespace+0x0/0x1c4) from [<c00084f8>] (kernel_init+0x128)
 r5:c0028a94 r4:c05359e0                                                       
[<c00083d0>] (kernel_init+0x0/0x170) from [<c005010c>] (do_exit+0x0/0x6dc)     
 r5:c00083d0 r4:00000000   

Суть проблемы заключается в том что карта почему то считается read only устройством (ro) и поэтому ее 3-й раздел (mmcblk0p3) не может быть принят ядром в качестве корневого раздела.
Чтобы это обойти я подредактировал следующие файлы:
..../ltib/rpm/BUILD/linux-2.6.35.3/arch/arm/mach-mx28/device.c
..../ltib/rpm/BUILD/linux-2.6.35.3/drivers/mmc/host/mxs-mmc.c

В device.c есть функция mxs_mmc_get_wp_ssp0 (wp - write protect), я сделал так

static int mxs_mmc_get_wp_ssp0(void)
{
   return 0;   
   // return gpio_get_value(MMC0_WP);
}
В  mxs-mmc.c тоже закоментировал весь код функции mxs_mmc_get_ro и сделал безусловный return 0;
/* Return read only state of card */
static int mxs_mmc_get_ro(struct mmc_host *mmc)
{
   return 0;   
   /* struct mxs_mmc_host *host = mmc_priv(mmc);
   struct mxs_mmc_platform_data *mmc_data = host->dev->platform_data;

   if (mmc_data && mmc_data->get_wp)
      return mmc_data->get_wp();

   return 0; */
}

После полной пересборки ядра и rootfs загрузочная карта заработала и загрузка завершилась "freescale login:"

Возможно есть менее грубое решение этой проблемы? Никто не сталкивался?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Загрузочная MicroSD карта с Linux
« Ответ #1 : 13 Ноября, 2012, 13:11:35 »

Какой был cmdline?
Записан

dm2601

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 3
Re: Загрузочная MicroSD карта с Linux
« Ответ #2 : 13 Ноября, 2012, 15:00:02 »

Я смогу посмотреть cmdline только вечером, но в общем все выяснил. Я посмотрел содержимое патча для линукса с сайта zao-zeo (http://www.zao-zeo.ru/media/files/linux/2.6.35/tion-pro28_patch_svn2127.zip) и нашел там такое:

+static int mxs_mmc_get_wp_ssp0(void)
+{
+   //return gpio_get_value(MMC0_WP);
+   return 0; // TionPro28 has no WP pin
+}

То есть то же самое, что я и сделал. Вывод видимо такой - мне в исходники взятые с сайта freescale (которые с LTIB идут) следовало закинуть патч с zao-zeo и не пришлось бы изобретать велосипед ).
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: Загрузочная MicroSD карта с Linux
« Ответ #3 : 14 Ноября, 2012, 14:17:51 »

Да, для Тиона-Про28 нужно применить патч с сайта при сборке ядра. Иначе не вся переферия будет работать.
Записан

makfloy

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 6
Re: Загрузочная MicroSD карта с Linux
« Ответ #4 : 17 Ноября, 2012, 12:55:57 »

Записать загрузочную mmc карту можно  и скриптом mk_mx28_sd из архива L2.6.35_10.12.01_SDK_scripts. Но в нем ошибка в функции make_nominal_partition():
function make_nominal_partition() {
    if [[ $DEBUG ]] ;
    then
        WRITE=q
    else
        WRITE=w
    fi
echo "o
n
p
1
1
+32M
t
b
n
p
...

вместо "1" должна быть пустая строка.
« Последнее редактирование: 17 Ноября, 2012, 12:57:30 от makfloy »
Записан

Day

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 34
Re: Загрузочная MicroSD карта с Linux
« Ответ #5 : 20 Мая, 2013, 15:03:41 »

скрипты от freescale работают изумительно. Ничего не правил всё и так заработало.
Записан

Day

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 34
Re: Загрузочная MicroSD карта с Linux
« Ответ #6 : 12 Декабря, 2013, 23:50:47 »

Вот теперь напоролся на нероботоспособность скрипта! И в самом деле на всех старых дистрибютивах всё работает как часы. на Debian 7 пришлось править как указано выше (убрать единичку)
Записан

Danila

  • Administrator
  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 703
Re: Загрузочная MicroSD карта с Linux
« Ответ #7 : 13 Декабря, 2013, 12:04:22 »

Скрипт писался для Ubuntu 9.04. На других дистрибутивах возможны ошибки.
Записан