4
0
Fork 0

added uboot

This commit is contained in:
Benjamin Böhmke 2019-11-02 23:51:56 +01:00
parent 232df11bde
commit a23515a3e2
5 changed files with 136 additions and 23 deletions

View File

@ -1,8 +1,54 @@
FROM debian:buster AS uboot
RUN apt-get update && \
apt-get install -y build-essential git wget bison flex gcc-arm-linux-gnueabi device-tree-compiler bc
RUN mkdir /uboot_build/ && \
mkdir /uboot/
WORKDIR /uboot_build/
RUN wget ftp://ftp.denx.de/pub/u-boot/u-boot-2019.10.tar.bz2 && \
tar -xjf u-boot-2019.10.tar.bz2
WORKDIR /uboot_build/u-boot-2019.10/
# model a/b/zero
RUN make CROSS_COMPILE=arm-linux-gnueabi- distclean && \
make CROSS_COMPILE=arm-linux-gnueabi- rpi_defconfig && \
make CROSS_COMPILE=arm-linux-gnueabi- -j8 u-boot.bin && \
cp u-boot.bin /uboot/u-boot_rpi1.bin
# model zero w
RUN make CROSS_COMPILE=arm-linux-gnueabi- distclean && \
make CROSS_COMPILE=arm-linux-gnueabi- rpi_0_w_defconfig && \
make CROSS_COMPILE=arm-linux-gnueabi- -j8 u-boot.bin && \
cp u-boot.bin /uboot/u-boot_rpi0_w.bin
# model 2 b
RUN make CROSS_COMPILE=arm-linux-gnueabi- distclean && \
make CROSS_COMPILE=arm-linux-gnueabi- rpi_2_defconfig && \
make CROSS_COMPILE=arm-linux-gnueabi- -j8 u-boot.bin && \
cp u-boot.bin /uboot/u-boot_rpi2.bin
# model 3 (32 bit)
RUN make CROSS_COMPILE=arm-linux-gnueabi- distclean && \
make CROSS_COMPILE=arm-linux-gnueabi- rpi_3_32b_defconfig && \
make CROSS_COMPILE=arm-linux-gnueabi- -j8 u-boot.bin && \
cp u-boot.bin /uboot/u-boot_rpi3.bin
# model 4 (32 bit)
RUN make CROSS_COMPILE=arm-linux-gnueabi- distclean && \
make CROSS_COMPILE=arm-linux-gnueabi- rpi_4_32b_defconfig && \
make CROSS_COMPILE=arm-linux-gnueabi- -j8 u-boot.bin && \
cp u-boot.bin /uboot/u-boot_rpi4.bin
FROM alpine:3.10
RUN apk update && \
apk add automake build-base git autoconf confuse-dev linux-headers \
findutils mtools e2fsprogs-extra alpine-sdk dosfstools && \
findutils mtools e2fsprogs-extra alpine-sdk dosfstools uboot-tools && \
rm -rf /var/cache/apk/*
RUN git clone https://github.com/pengutronix/genimage.git /tmp/genimage && \
@ -23,5 +69,6 @@ RUN cd /genext2fs && \
rm -rf /tmp/pkg/
ADD ./resources /resources
COPY --from=uboot /uboot/ /uboot/
WORKDIR /work

30
Dockerfile.bak Normal file
View File

@ -0,0 +1,30 @@
FROM alpine:3.10
RUN apk update && \
apk add automake build-base git autoconf confuse-dev linux-headers \
findutils mtools e2fsprogs-extra alpine-sdk dosfstools && \
rm -rf /var/cache/apk/*
RUN git clone https://github.com/pengutronix/genimage.git /tmp/genimage && \
cd /tmp/genimage && \
./autogen.sh && \
./configure CFLAGS='-g -O0' --prefix=/usr && \
make install && \
cd && \
rm -rf /tmp/genimage
ADD ./resources/genext2fs /genext2fs
RUN cd /genext2fs && \
abuild-keygen -a -i -q && \
abuild -F -P /tmp/pkg && \
apk add /tmp/pkg/x86_64/genext2fs-1*.apk && \
rm -rf /tmp/pkg/
ADD ./resources /resources
RUN apk update
RUN apk add uboot-tools
WORKDIR /work

3
resources/boot.cmd Normal file
View File

@ -0,0 +1,3 @@
fdt addr ${fdt_addr} && fdt get value bootargs /chosen bootargs
ext4load mmc 0:2 ${kernel_addr_r} /boot/uImage
bootm ${kernel_addr_r} - ${fdt_addr}

View File

@ -72,7 +72,6 @@ apk --root ${ROOTFS_PATH} --update-cache --initdb --arch armhf add $BASE_PACKAGE
# add google DNS to enable network access inside chroot
echo "nameserver 8.8.8.8" > ${ROOTFS_PATH}/etc/resolv.conf
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
echo ">> Configure root FS"
@ -139,8 +138,15 @@ chmod +x ${ROOTFS_PATH}/etc/local.d/90-resizedata.start
# mount data and boot partition (root is already mounted)
cat >${ROOTFS_PATH}/etc/fstab <<EOF
/dev/mmcblk0p1 /boot vfat defaults,ro 0 2
/dev/mmcblk0p3 /data ext4 defaults 0 1
/dev/mmcblk0p1 /uboot vfat defaults,ro 0 2
/dev/mmcblk0p4 /data ext4 defaults 0 1
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /run tmpfs defaults 0 0
EOF
# custom
@ -152,6 +158,12 @@ rm -rf ${ROOTFS_PATH}/var/cache/apk/*
# TODO /etc/motd
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
echo ">> Prepare kernel for uboot"
# build uImage
mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "Linux kernel" -d ${ROOTFS_PATH}/boot/vmlinuz-rpi2 ${ROOTFS_PATH}/boot/uImage
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# create boot FS
@ -164,16 +176,31 @@ mkdir -p ${BOOTFS_PATH}
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/bootcode.bin
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/fixup.dat
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/fixup_cd.dat
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/fixup_db.dat
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/fixup_x.dat
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/fixup4.dat
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/fixup4cd.dat
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/fixup4db.dat
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/fixup4x.dat
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/start.elf
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/start_cd.elf
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/start_db.elf
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/start_x.elf
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/start4.elf
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/start4cd.elf
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/start4db.elf
wget -P ${BOOTFS_PATH} https://github.com/raspberrypi/firmware/raw/master/boot/start4x.elf
# copy linux kernel and overlays
# copy linux kernel and overlays to boot
cp ${ROOTFS_PATH}/usr/lib/linux-*-rpi2/*.dtb ${BOOTFS_PATH}/
cp -r ${ROOTFS_PATH}/usr/lib/linux-*-rpi2/overlays ${BOOTFS_PATH}/
cp ${ROOTFS_PATH}/boot/initramfs-rpi2 ${BOOTFS_PATH}/
cp ${ROOTFS_PATH}/boot/vmlinuz-rpi2 ${BOOTFS_PATH}/
# copy u-boot
cp /uboot/* ${BOOTFS_PATH}/
# generate boot script
mkimage -A arm -T script -C none -n "Boot script" -d ${RES_PATH}/boot.cmd ${BOOTFS_PATH}/boot.scr
# write boot config
cat >${BOOTFS_PATH}/config.txt <<EOF
@ -189,22 +216,27 @@ hdmi_mode=1
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0
kernel=u-boot_rpi1.bin
[pi0w]
kernel=u-boot_rpi0_w.bin
[pi2]
kernel=vmlinuz-rpi2
initramfs initramfs-rpi2
kernel=u-boot_rpi2.bin
[pi3]
kernel=vmlinuz-rpi2
initramfs initramfs-rpi2
kernel=u-boot_rpi3.bin
[pi4]
kernel=u-boot_rpi4.bin
[all]
include usercfg.txt
enable_uart=1
EOF
cat >${BOOTFS_PATH}/cmdline.txt <<EOF
console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 fsck.repair=yes rw rootwait quiet
EOF
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
@ -224,8 +256,8 @@ echo ">> Create SD card image"
# boot partition
cat >${WORK_PATH}/genimage_boot.cfg <<EOF
image boot.vfat {
name = "boot"
vfat {
label = "boot"
}
size = 32M
}
@ -235,8 +267,8 @@ make_image ${BOOTFS_PATH} ${WORK_PATH}/genimage_boot.cfg
# root partition
cat >${WORK_PATH}/genimage_root.cfg <<EOF
image rootfs.ext4 {
name = "root"
ext4 {
label = "rootfs"
}
size = 150MB
}
@ -246,8 +278,8 @@ make_image ${ROOTFS_PATH} ${WORK_PATH}/genimage_root.cfg
# data partition
cat >${WORK_PATH}/genimage_data.cfg <<EOF
image datafs.ext4 {
name = "data"
ext4 {
label = "data"
}
size = 20MB
}
@ -266,7 +298,11 @@ image sdcard.img {
image = "boot.vfat"
}
partition rootfs {
partition rootfs_a {
partition-type = 0x83
image = "rootfs.ext4"
}
partition rootfs_b {
partition-type = 0x83
image = "rootfs.ext4"
}

View File

@ -18,11 +18,8 @@ esac
LAST_PART_NUM=$(parted /dev/${ROOT_DEV} -ms unit s p | tail -n 1 | cut -f 1 -d:)
LAST_PART="${ROOT_DEV}p${LAST_PART_NUM}"
# unmount if mounted
if grep -qs "/dev/${LAST_PART}" /proc/mounts; then
umount /dev/${LAST_PART}
fi
# unmount last partition
umount /dev/${LAST_PART}
# Get the starting offset of last partition
PART_START=$(parted /dev/${ROOT_DEV} -ms unit s p | grep "^${LAST_PART_NUM}" | cut -f 2 -d: | sed 's/[^0-9]//g')
@ -60,4 +57,4 @@ partprobe /dev/${ROOT_DEV} &&
mount -a
rm -f /etc/local.d/90-resizedata.start
chmod -x /etc/local.d/90-resizedata.start