====== Подготовка 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/
====== Запись ядра и файловой системы ======
Файл ядра и модулей получают выполнением инструкций на странице [[u3b-kernel|компиляции ядра]].
После исполнения скрипта 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