Ich habe mal mein “altes” Script überarbeitet zum erstellen von einem Debian Image.
Die git Quellen sollte man entsprechend anpassen , da sie derzeit auf meine Testing zeigen und noch nicht alles funktioniert (jedenfalls M2 Ultra) der Rest sind aktuelle Quellen darin.
Verzeichnis zum erstellen
mkdir build
cd build
Sources laden hier für den Banana M2 Ultra (r40)
git clone --depth 1 -b r40 https://github.com/wens/u-boot-sunxi
git clone --depth 1 -b r40 https://github.com/a1d3s/linux
Image für die SD Karte erstellen 4GB
dd if=/dev/zero of=image.img bs=1M count=3900
Image als Laufwerk laden
losetup /dev/loop0 image.img
Image partitonieren und formatieren
fdisk /dev/loop0
partx -av /dev/loop0
mkfs.vfat /dev/loop0p1
mkfs.ext4 /dev/loop0p2
Arbeitsverzeichnis erstellen
mkdir /mnt/rootfs
mount /dev/loop0p2 /mnt/rootfs/
mount /dev/loop0p1 /mnt/rootfs/boot
Variablen setzen zum bearbeiten
targetdir=/mnt/rootfs
Version von Debian angeben wheezy/jessie/sid/testing sind möglich
distro=jessie
debootstrap um ein neues Debian bauen
debootstrap --arch=armhf --foreign $distro $targetdir
cp /usr/bin/qemu-arm-static $targetdir/usr/bin/
cp /etc/resolv.conf $targetdir/etc
Chroot in das neue Debian
chroot $targetdir
Variablen im Chroot neu setzen
distro=jessie
export LANG=C
/debootstrap/debootstrap --second-stage
Einstellungen für APT
cat <
deb http://ftp.uk.debian.org/debian $distro main contrib non-free
deb-src http://ftp.uk.debian.org/debian $distro main contrib non-free
deb http://ftp.uk.debian.org/debian $distro-updates main contrib non-free
deb-src http://ftp.uk.debian.org/debian $distro-updates main contrib non-free
deb http://security.debian.org/debian-security $distro/updates main contrib non-free
deb-src http://security.debian.org/debian-security $distro/updates main contrib non-free
EOT
cat <
APT::Install-Recommends "0";
APT::Install-Suggests "0";
EOT
Lokalisierung und Zeitzone einstellen
apt-get update
apt-get install locales dialog -y
dpkg-reconfigure locales
dpkg-reconfigure tzdata
Extra Pakete installieren
apt-get install openssh-server ntpdate sudo wireless-tools wpasupplicant mc dbus slim -y
Passwort setzen und Benutzer erstellen
passwd root
useradd -m -G users,sudo,ssh -s /bin/bash bpi
passwd bpi
Netzwerk vorbereiten
cat <
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
EOT
Computername einstellen
echo bpi > /etc/hostname
Konsole erstellen
echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100 >> /etc/inittab
rc.local anpassen
ssh keys sollen beim start neu erstellt werden
nano /etc/rc.local
-> vor exit 0 einfügen
test -f /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server
Chroot verlassen
exit
Kernel bauen (defconfig je nach Board auswählen)
cd linux/
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bananam2_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x40008000 uImage modules dtbs
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=$targetdir/lib/modules
Kernel und DTB kopieren
DTB je nach Board anpassen
cp arch/arm/boot/uImage $targetdir/boot
cp arch/arm/boot/dts/sun8i-r40-bananapi-m2-ultra.dtb $targetdir/boot
Bootscript erstellen
DTB je nach Board anpassen
cd ..
nano boot.cmd
fatload mmc 0 0x46000000 uImage
fatload mmc 0 0x49000000 sun8i-r40-bananapi-m2-ultra.dtb
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait panic=10 ${extra}
env set fdt_high ffffffff
bootm 0x46000000 - 0x49000000
mkimage -C none -A arm -T script -d boot.cmd boot.scr
cp boot.scr $targetdir/boot
U-Boot Bootloader bauen
cd ../u-boot-sunxi
make CROSS_COMPILE=arm-linux-gnueabihf- Bananapi_M2_Ultra_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf-
Bootsektor löschen
dd if=/dev/zero of=/dev/loop0 bs=1k count=1023 seek=1
Bootsektor schreiben
dd if=u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8
Aufräumen
rm $targetdir/etc/ssh/ssh_host*
rm $targetdir/etc/resolv.conf
rm $targetdir/usr/bin/qemu-arm-static