Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Отладочные платы » SK-iMX233
imx233 загрузка с sd/mmc
sasamy
Добавлено 23.05.2010 02:51 Редактировалось 23.05.2010 13:47
2
Сообщение: 1
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Делал по описанию с форума, с разницей в том что у меня не usb-кардридер а ноутбучный соотвественно устройство было /dev/mmcblk0

Цитата

FLASHING a .SB image and rootfs to an SD Card
(NOTE - "sdb1" could enumerate differently on your host, so confirm what it enumerates as before running fdisk!)

* insert the card reader to the Linux host.
* Un-mount the card reader, i.e. 'sudo umount /dev/sdb1'
* run fdisk, 'sudo fdisk /dev/sdb'
o Press 'p' to show the partitions on the card
o Press 'd' to delete a partition. Repeat to remove all partitions
o Press 'n' to create a new partition
+ press 'p' to select the primary partition
+ press '1' for creating partition 1 on the card
+ press Enter to start from first block
+ Type '16MB' to create the 16MB partitions
o Press 't' to change the newly created partition type
+ Enter '53' for the new partition type
o Press 'n' to create a second partition
+ Press Enter to accept all default setting
o Press 'w' to write the partitions to the card and exit the fdisk

# Create the SD/MMC raw partition image and copy it to the card.

* run 'dd if=/dev/zero of=mmc_boot_partition.raw bs=512 count=4' to create and fill the image file, mmc_boot_partition.raw with 4 blocks of 512 bytes each
* run 'dd if=~/ltib/rootfs/boot/imx233_linux.sb of=mmc_boot_partition.raw ibs=512 seek=4 conv=sync,notrunc' to append the boot stream, imx233_linux.sb, to the mmc_boot_partition.raw.
* run 'dd if=mmc_boot_partition.raw of=/dev/sdb1' to write the file to the boot partition on the SD card
* format the second partition on the SD card
o run 'sudo mkfs.ext2 /dev/sdb2' command.
* mount the second partition on the card
o if you do not have the mmc mounting point created yet, create one with 'sudo mkdir /mnt/mmc'
o run 'sudo mount /dev/sdb2 /mnt/mmc' to mount the partition as the mmc card
* Copy the rootfs to the card
o run 'sudo cp -a ~/ltib/rootfs/* /mnt/mmc' to put down the root filesystem
* unmount the card, 'umount /dev/sdb2'.


Переводить думаю нет смысла - так все понятно, единственно я не стал мудрить с созданием промежуточного файла а делал все сразу на карте:

dd if=/dev/zero of=/dev/sdb1 bs=512 count=4
dd if=linux.sb of=/dev/sdb1 ibs=512 seek=4 conv=sync,notrunc

Для загрузки с sd/mmc джампики в таком положении:
J6,7,8 - замкнуты, J9 разомкнут.

Для загрузки с sd/mmc нужно обязательно прошить OTP биты - на оригинальной EVK они зашиты производителем, иначе выдаст ошибку:

Цитата

To enable SD/MMC MBR support in the i.MX23 SoC ROM:
HW_OCOTP_ROM0[3]: 1
To configure the i.MX23 SoC ROM to use PWM3 pin for SD/MMC power gate
control:
HW_OCOTP_ROM0[20]: 0
HW_COOTP_ROM0[21]: 1


Для этого есть утилита BitBurner.v1.0.4.6.zip где-то на сайте фрискейла, если лень искать можно взять тут http://sasamy.narod.ru/BitBurner.v1.0.4.6.zip Там все предельно понятно - плата должна быть переведена в режим загрузки с usb (J6 - замкнут , J7,8,9 - разомкнуты).

Еще рекомендовано наложить патч IMX23 SD ROM PATCH: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=i.MX233&nodeId=0162468rH31143ZrDR780E&fpsp=1&tab=Design_Tools_Tab#

но например с 4 Гб sdhc я нормально загружаюсь без патча.

Командная строка у меня имеет вид
CONFIG_CMDLINE="console=ttyAM0,115200 ssp1=spi1 ssp2=mmc lcd_panel=tvenc_pal root=/dev/mmcblk0p2 rootwait"
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 23.05.2010 07:42 Редактировалось 23.05.2010 07:50 Сообщение: 2
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Для создания загрузочного диска sd/mmc можно воспользоваться этим скриптом - только я за сохранность ваших данных отвественности не несу :)
Код

#!/bin/bash

if [ -z $1 ]; then
echo -e "\033[1mUsage: ./part disk_name [image.sb] [fs_type]\033[0m"
exit
fi

if [ ! -b "$1" ]; then
echo -e "\033[1mError: $1 disk not found\033[0m"
exit
fi

if [[ "$1" =~ mmc ]]; then
p="p"
fi


dd if=/dev/zero of=$1 bs=512 count=1

sfdisk --force -uM $1 << EOF
,16,0x53
,,83
EOF

if [ ! -b "${1}${p}1" ]; then
echo -e "\033[1mError: partition ${1}${p}1 not found\033[0m"
exit
fi

if [ ! -b "${1}${p}2" ]; then
echo -e "\033[1mError: partition ${1}${p}2 not found\033[0m"
exit
fi

if [ -n "$2" ]; then
echo -e "\033[1mWriting image $2 to partition ${1}${p}1 ...\033[0m"
dd if=/dev/zero of=${1}${p}1 bs=512 count=4
dd if=$2 of=${1}${p}1 bs=512 seek=4 conv=sync,notrunc
else
exit
fi

if [ -n "$3" ]; then
echo -e "\033[1mMake $3 fs on ${1}${p}2 ...\033[0m"
mkfs -t $3 ${1}${p}2
fi


Необходимый 1 параметр - наименование диска, например /dev/mmcblk0 или /dev/sdb - зависит от типа картридера, если нет других параметров - только создаст новую таблицу с 2-мя разделами. Если есть второй параметр - скрипт посчитает его наименованием имиджа .sb и если такой существует запишет его в первый раздел. Если есть третий параметр - то кроме всего прочего создаст ФС с таким именем на втором разделе. Пример:
#./part /dev/sdb linux.sb ext2

создаст 2 раздела в соответствии с требованиями загрузчика imx233: первый раздел 16М - запишет туда загрузочный образ ядра, второй раздел - с файловой системой ext2.

#./part /dev/sdb uboot.sb

создаст разделы, в первый раздел запишет образ uboot.

#./part /dev/mmcblk0

просто создаст разделы на mmc (sd)

Настоятельно рекомендую не путать название диска - если такой существует там будут удалены все данные.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 23.05.2010 16:06 Редактировалось 23.05.2010 16:13 Сообщение: 3
Pavel Ivanchenko
Admin
4.39

Пункты: 92788
Регистрация: 24.03.2009
Пол: Мужчина
Так же, можно проделать все это на самой плате.
Для начала нужно изменить конфиг OTP одного из регистров. С помошью утилиты BitBurner соединяемся с платтой через USB (перебирая устройства пока слева не появится список регистров), потом настраиваем биты в соответствии:

В противном случае, грузиться с SD/MMC контроллер не будет, не смотря на положение загрузочных джамперов (J6-J8 замкнуты, J9 разомкнут).

Возможны два варианта загрузки:
1) Загружаемся с SD, корневая ФС остается в initramfs (т.е. в памяти), SD карточку монтируем как внешний съемный накопитель
2) Загружаемся с SD, корневая расположена на самой SD карте
Теоретически, для первого варианта, можно, создав два раздела, второй отформатировать под FAT и пользоваться картой как раньше (хотя, как к этому отнесутся всевозможные фотоаппараты и плееры ...).

Первым делом потребуется загрузить систему с драйвером SD/MMC, так же потребуется включить в коневую ФС sfdisk (в Buildroot) и mkfs_ext2 (в Busybox). Я немного изменил скрипт создания разделов (не очень изящно, но у нас не конкурс красоты ):
Код
#!/bin/sh


if [ -z $1 ]; then
echo -e "\033[1mUsage: ./part disk_name [image.sb] [fs_type]\033[0m"
exit
fi


#tftp -g -b 4096 -r "$2" 192.168.0.2

if [ ! -b "$1" ]; then
echo -e "\033[1mError: $1 disk not found\033[0m"
exit
fi

#if [[ "$1" =~ mmc ]]; then
p="p"
#fi

umount ${1}${p}

dd if=/dev/zero of=$1 bs=512 count=1

sfdisk --force -uM $1 << EOF
,16,0x53
,,83
EOF

if [ ! -b "${1}${p}1" ]; then
echo -e "\033[1mError: partition ${1}${p}1 not found\033[0m"
exit
fi

if [ ! -b "${1}${p}2" ]; then
echo -e "\033[1mError: partition ${1}${p}2 not found\033[0m"
exit
fi

if [ -n "$2" ]; then
echo -e "\033[1mWriting image $2 to partition ${1}${p}1 ...\033[0m"
dd if=/dev/zero of=${1}${p}1 bs=512 count=4
dd if=$2 of=${1}${p}1 bs=512 seek=4 conv=sync,notrunc
else
exit
fi

if [ -n "$3" ]; then
echo -e "\033[1mMake $3 fs on ${1}${p}2 ...\033[0m"
#mkfs_ext2 -t $3 ${1}${p}2
mkfs.ext2 ${1}${p}2
fi

echo "Copy root FS to SD/MMC card ..."
cd /mnt/mmcblk0p2
mkdir ./bin
mkdir ./dev
mkdir ./etc
mkdir ./home
mkdir ./lib
mkdir ./root
mkdir ./proc
mkdir ./tmp
mkdir ./sys
mkdir ./mnt
mkdir ./mnt/www
mkdir ./mnt/nand
mkdir ./sbin
mkdir ./usr
mkdir ./var

cp -r /bin/* /mnt/mmcblk0p2/bin

cp -r /dev/* /mnt/mmcblk0p2/dev
cp -r /etc/* /mnt/mmcblk0p2/etc
cp -r /home/* /mnt/mmcblk0p2/home
cp -r /lib/* /mnt/mmcblk0p2/lib
cp -r /mnt/www/* /mnt/mmcblk0p2/mnt/www
cp -r /root/* /mnt/mmcblk0p2/root
cp -r /sbin/* /mnt/mmcblk0p2/sbin
cp -r /usr/* /mnt/mmcblk0p2/usr
cp -r /var/* /mnt/mmcblk0p2/var
cp -r /linuxrc /mnt/mmcblk0p2/linuxrc
cp -r /init /mnt/mmcblk0p2/init

echo "Now You can close J6,J7,J8 and reboot the system."

Во вложении образ ядра и корневой ФС (включая sfdisk и mkfs.ext2) с этим скриптом.

После успешной загрузки, необходимо подготовить ядро ориентированное на использование в качестве rootfs самой SD/MMC, для для этого достаточно изменить аргументы запуска ядра на:
Код
console=ttyAM0,115200 ssp1=spi1 ssp2=mmc lcd_panel=tvenc_pal root=/dev/mmcblk0p2 rootwait
И отключить initramfs.
Образ этого ядра так же см. во вложении.

Копируем требуемый образ, например tftp -g -b 4096 -r linux.sb 192.168.0.2, кстати, в дефолтной корневой ФС присутствуют утилиты Z-modem, так что образы можно и через терминал залить (rz).

Запускаем: parts /dev/mtdblock0 linux.sb ext2
По окончании замыкаем джампера J6-J8 (J9 с SD всегда разомкнута!!!), перезагружаемся уже с SD/MMC карты.

Образы системы - Attachment file: uploads/forum/forum-P9pzYKaOis-7.zip
BitBurner - Attachment file: uploads/forum/forum-U5txX9nsLb-7.zip
Спуститься к концу Подняться к началу
Персональная информация
alexsl
Добавлено 28.12.2010 15:19 Сообщение: 4
alexsl
0

Пункты: 4270
Регистрация: 26.10.2010
Добрый день. Сделал конфиг OTP регистра как в посте №3(по рисунку) на новой плате. Однако в консоль выводится ошибка 0x8020a014 (ERROR_DDI_SD_MMC_DEVICE_NOT_SUPPORTED). В чем может быть проблема?
На старой плате проблем с флешкой нет(флешку использовал одну и туже). Заметил единственное отличие: На рабочей плате
SD_POWER_GPIO_GATE(21:20) = 0 - PWM0, на нерабочей - SD_POWER_GPIO_GATE(21:20) = 10 - PWM3. Возможно в этом причина. Какое значение правильное?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 06.01.2011 22:30 Редактировалось 06.01.2011 22:41 Сообщение: 5
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

SD_POWER_GPIO_GATE(21:20) = 0 - PWM0, на нерабочей - SD_POWER_GPIO_GATE(21:20) = 10 - PWM3. Возможно в этом причина. Какое значение правильное?


Подозреваю что для наших плат это не имеет значения - питание на sd/mmc присутствует всегда, а конфиг взят с форума фрискейл - на оригинальной отладочной плате evk питанием sd/mmc управляют через gpio:

Код

#if defined(CONFIG_MMC_MXS) || defined(CONFIG_MMC_MXS_MODULE)
-#define MMC0_POWER MXS_PIN_TO_GPIO(PINID_PWM3)
-#define MMC0_WP MXS_PIN_TO_GPIO(PINID_PWM4)


соответсвенно загрузчик тоже должен дернуть gpio чтобы подать питание, нам это не нужно.
Спуститься к концу Подняться к началу
Персональная информация
Losha
Добавлено 16.08.2013 10:30 Сообщение: 6
Losha
1

Пункты: 3418
Регистрация: 27.08.2012
Подскажите, допускается ли "дожигание" битов в регистре? Допустим я прожег один бит в регистре, а потом понадобилось прожечь еще один в том же регистре. Это возможно?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 16.08.2013 11:12 Редактировалось 16.08.2013 11:14 Сообщение: 7
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Теоретически - да, если регистр перед этим не был залочен (делать write без lock)
Спуститься к концу Подняться к началу
Персональная информация
Semagar
Добавлено 07.05.2014 18:55 Сообщение: 8
Semagar
0

Пункты: 40
Регистрация: 07.05.2014
Цитата
...
Еще рекомендовано наложить патч IMX23 SD ROM PATCH: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=i.MX233&nodeId=0162468rH31143ZrDR780E&fpsp=1&tab=Design_Tools_Tab#

но например с 4 Гб sdhc я нормально загружаюсь без патча.

Каким способом можно наложить данный патч?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 07.05.2014 19:29 Редактировалось 07.05.2014 19:30 Сообщение: 9
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Тема старая, помоему это надо не накладывать а сначала загружаться с i2c eeprom, к тому же это давно пофиксено

https://community.freescale.com/thread/294710
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-iMX233