Инструменты пользователя

Инструменты сайта


wiki:usomiq-sdcard

Подготовка SD карты для загрузки Linux

Запись U-Boot на microSD-card

Узнать имя устройства, связанное c SD картой, можно командой «lsblk»

user@localhost:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sdb      8:16   0 111,8G  0 disk 
fd0      2:0    1     4K  0 disk 
sdc      8:32   1   7,4G  0 disk 
└─sdc1   8:33   1   7,4G  0 part /media/rootfs
sda      8:0    0 232,9G  0 disk 
├─sda2   8:2    0     1K  0 part 
├─sda5   8:5    0   7,6G  0 part [SWAP]
├─sda1   8:1    0 130,4G  0 part /
└─sda6   8:6    0  94,9G  0 part /windows

Предположим, что SD карта видна в системе как /dev/sdc

export DISK=/dev/sdc

Очистка microSD

sudo dd if=/dev/zero of=${DISK} bs=1M count=10

Установка загрузчика

sudo dd if=./u-boot/MLO of=${DISK} count=1 seek=1 bs=128k
sudo dd if=./u-boot/u-boot.img of=${DISK} count=2 seek=1 bs=384k

Создание таблицы разделов на microSD

Отмонтируйте SD-карту, выполнив команду:

sudo umount /dev/sdc1

Проверка версии sfdisk:

sudo sfdisk --version

Для версии sfdisk >= 2.26.x:

sudo sfdisk ${DISK} <<-__EOF__
4M,,L,*
__EOF__

Для версии sfdisk ⇐ 2.25.x:

sudo sfdisk --unit M ${DISK} <<-__EOF__
4,,L,*
__EOF__

Форматирование разделов

Проверка версии mkfs.ext4:

sudo mkfs.ext4 -V

Для версии mkfs.ext4 >= 1.43:

sudo mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}1

Для версии mkfs.ext4 ⇐ 1.42:

sudo mkfs.ext4 -L rootfs ${DISK}1

Монтирование карты

На большинстве операционных систем монтирование происходит автоматически, но если этого не произошло, монтируем с использованием команд:

sudo mkdir -p /media/rootfs/
sudo mount ${DISK}1 /media/rootfs/

Запись ядра и файловой системы

Файл ядра и модулей получают выполнением инструкций на странице компиляции ядра.

После исполнения скрипта build_kernel.sh появится следующее сообщение:

-----------------------------
Script Complete
eewiki.net: [user@localhost:~$ export kernel_version=4.X.Y-Z]
-----------------------------

Скопируйте в командную строку сообщение «export kernel_version=4.X.Y-Z» в точности, как написано в окне терминала и выполните:

export kernel_version=4.X.Y-Z

Запись файловой системы

sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync
sudo chown root:root /media/rootfs/
sudo chmod 755 /media/rootfs/

Запись файла ядра zImage :

sudo cp -v ./ti-linux-kernel-dev/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}

Запись модулей ядра

sudo tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/

Опеределение версии ядра в переменной окружения uname_r

sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"

Запись бинарных файлов для дерева устройств

sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/
sudo tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/

Исправьте fstab

sudo sh -c "echo '/dev/mmcblk0p1  /  auto  errors=remount-ro  0  1' >> /media/rootfs/etc/fstab"

Включение сети

Исправьте: /etc/network/interfaces

sudo nano /media/rootfs/etc/network/interfaces

Добавьте строки:

auto lo
iface lo inet loopback
  
auto eth0
iface eth0 inet dhcp

Исправьте: /etc/udev/rules.d/70-persistent-net.rules

sudo nano /media/rootfs/etc/udev/rules.d/70-persistent-net.rules

Добавьте строки:

# BeagleBone: net device ()
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Запись файла uEnv.txt

Создайте файл:

vi uEnv.txt

Добавьте в него строки:

loadaddr=0x82000000
fdtaddr=0x88000000
rdaddr=0x88080000
  
initrd_high=0xffffffff
fdt_high=0xffffffff
  
#for single partitions:
mmcroot=/dev/mmcblk0p1
  
loadximage=load mmc 0:1 ${loadaddr} /boot/vmlinuz-${uname_r}
loadxfdt=load mmc 0:1 ${fdtaddr} /boot/dtbs/${uname_r}/${fdtfile}
loadxrd=load mmc 0:1 ${rdaddr} /boot/initrd.img-${uname_r}; setenv rdsize ${filesize}
loaduEnvtxt=load mmc 0:1 ${loadaddr} /boot/uEnv.txt ; env import -t ${loadaddr} ${filesize};
loadall=run loaduEnvtxt; run loadximage; run loadxfdt;
  
mmcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} root=${mmcroot} rootfstype=${mmcrootfstype} ${cmdline}
  
uenvcmd=run loadall; run mmcargs; bootz ${loadaddr} - ${fdtaddr};

Запишите файл на SD-карту:

sudo cp -v ./uEnv.txt /media/rootfs

Извлеките SD/microSD карту

sync
sudo umount /media/rootfs

Подготовка eMMC для загрузки Linux

Запись загрузчика

Для последующей записи загрузчика U-Boot на eMMC скопируйте файлы MLO/u-boot.img на SD карту

sudo mkdir -p /media/rootfs/opt/backup/uboot/
sudo cp -v ./u-boot/MLO /media/rootfs/opt/backup/uboot/
sudo cp -v ./u-boot/u-boot.img /media/rootfs/opt/backup/uboot/

Для последующей работы необходимо загрузиться с SD/microSD и выполнять следующие действия, будучи в системе ARM Linux.

Запись U-Boot на eMMC

Узнать имя устройства, связанное с eMMC, можно командой «lsblk»

    
root@arm:~# lsblk                                                               
NAME         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT                                
mmcblk1boot0 179:16   0   16M  1 disk                                           
mmcblk1boot1 179:24   0   16M  1 disk                                           
mmcblk0      179:0    0  7.4G  0 disk                                           
  └─mmcblk0p1  179:1    0  7.4G  0 part /                                     
mmcblk1      179:8    0  3.6G  0 disk   

В данном случае, eMMC видна в системе как /dev/mmcblk1

export DISK=/dev/mmcblk1

Очистка eMMC

dd if=/dev/zero of=${DISK} bs=1M count=10

Установка загрузчика

dd if=/opt/backup/uboot/MLO of=${DISK} count=1 seek=1 bs=128k
dd if=/opt/backup/uboot/u-boot.img of=${DISK} count=2 seek=1 bs=384k

Создание таблицы разделов на eMMC

Проверка версии sfdisk:

sfdisk --version

Для версии sfdisk >= 2.26.x:

sfdisk ${DISK} <<-__EOF__
4M,,L,*
__EOF__

Для версии sfdisk ⇐ 2.25.x:

sfdisk --unit M ${DISK} <<-__EOF__
4,,L,*
__EOF__

Форматирование разделов

Проверка версии mkfs.ext4:

mkfs.ext4 -V

Для версии mkfs.ext4 >= 1.43:

mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit ${DISK}p1

Для версии mkfs.ext4 ⇐ 1.42:

mkfs.ext4 -L rootfs ${DISK}p1

Монтирование карты

На большинстве операционных систем монтирование происходит автоматически, но если этого не произошло, монтируем с использованием команд:

mkdir -p /media/rootfs/
mount ${DISK}p1 /media/rootfs/

Узнайте версию установленного ядра

root@arm:~# uname -a                                                                                         
Linux arm 4.X.Y-Z #1 SMP Tue May 2 16:26:46 MSK 2017 armv7l GNU/Linux

Скопируйте в командную строку сообщение «export kernel_version=4.X.Y-Z» и выполните:

export kernel_version=4.X.Y-Z

Скачайте и распакуйте архив с исходным кодом файловой системы

wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-8.7-minimal-armhf-2017-03-02.tar.xz
apt-get install xz-utils
tar xf debian-8.7-minimal-armhf-2017-03-02.tar.xz
User Password
root root

Запись файловой системы

tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync
chown root:root /media/rootfs/
chmod 755 /media/rootfs/

Запись файла ядра zImage :

cp -v /boot/vmlinuz-${kernel_version} /media/rootfs/boot/zImage

Запись модулей ядра

mkdir -p /media/rootfs/lib/modules
cp -r /lib/modules/${kernel_version} /media/rootfs/lib/modules

Запись файла uEnv.txt

Создайте файл:

vi /media/rootfs/uEnv.txt

Добавьте в него строки:

loadaddr=0x82000000
fdtaddr=0x88000000
rdaddr=0x88080000
  
initrd_high=0xffffffff
fdt_high=0xffffffff
  
#for single partitions:
mmcroot=/dev/mmcblk1p1
  
loadximage=load mmc 1:1 ${loadaddr} /boot/zImage
loadxfdt=load mmc 1:1 ${fdtaddr} /boot/dtbs/${uname_r}/${fdtfile}
loadxrd=load mmc 1:1 ${rdaddr} /boot/initrd.img-${uname_r}; setenv rdsize ${filesize}
loaduEnvtxt=load mmc 1:1 ${loadaddr} /boot/uEnv.txt ; env import -t ${loadaddr} ${filesize};
loadall=run loaduEnvtxt; run loadximage; run loadxfdt;
  
mmcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} root=${mmcroot} rootfstype=${mmcrootfstype} ${cmdline}
  
uenvcmd=run loadall; run mmcargs; bootz ${loadaddr} - ${fdtaddr};

Опеределение версии ядра в переменной окружения uname_r

sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"

Запись бинарных файлов для дерева устройств

mkdir -p /media/rootfs/boot/dtbs/
cp -r /boot/dtbs/${kernel_version} /media/rootfs/boot/dtbs

Исправьте fstab

sh -c "echo '/dev/mmcblk1p1  /  auto  errors=remount-ro  0  1' >> /media/rootfs/etc/fstab"

Включение сети

Исправьте: /etc/network/interfaces

nano /media/rootfs/etc/network/interfaces

Добавьте строки:

auto lo
iface lo inet loopback
  
auto eth0
iface eth0 inet dhcp

Исправьте: /etc/udev/rules.d/70-persistent-net.rules

nano /media/rootfs/etc/udev/rules.d/70-persistent-net.rules

Добавьте строки:

# BeagleBone: net device ()
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Отмонтируйте eMMC

sync
umount /media/rootfs
wiki/usomiq-sdcard.txt · Последнее изменение: 2019/01/10 17:28 — maxx