Toolchain
使用 linaro 的工具链, 因为新版 uboot 要求 gcc 版本根得上时代, 下载GCC 7.1 下载地址
解压, 并编译 /etc/profile
将环境变量添加进去
安装 dtc 编译器
apt-get install device-tree-compiler
uboot
编译
git clone git://git.denx.de/u-boot.git | |
git checkout v2016.01 # or whatever is latest | |
make CROSS_COMPILE=arm-linux-gnueabihf- orangepi_pc_defconfig | |
make CROSS_COMPILE=arm-linux-gnueabihf- -j8 |
编译生成 u-boot-sunxi-with-spl.bin 文件
orangepi_pc_defconfig
是 H3 的默认配置文件
编译内核
git clone git://github.com/linux-sunxi/linux-sunxi.git -b sunxi-next --depth=1 | |
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig | |
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig | |
# 使能需要的模块及其他功能 | |
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage dtbs -j8 |
最后生成 zImage 以及 dtb 文件
rootfs
先不弄这个
烧写(SD)
SD 卡分区, 注我设备上 sd 是 sdb, 在其他机器不一样, 别照抄, 硬盘数据丢了匆怪
用 fdisk 将 SD 分为两个 ext3 格式分区,第一个分区 10M 其余为第二个分区
fdisk -u=sectors /dev/sdb | |
# 先按 p 查看分区表,如果有按 d+ 表序号 删除它 | |
#接下来按 n(new)创建新分区 | |
#再按 p 主分区, 再接下来应该看得懂 | |
#创建好两个分区后按 w 写入分区并退出. 接下来格式化分区 | |
mkfs .ext3 /dev/sd[a~z][0~9] | |
# 收工 |
烧写
# 需要注意 SD 卡的分区, 偏移 8K 表示跳过分区表 | |
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8 | |
#拷贝 zImage xxx.dtb 到第一个分区 | |
# 启动命令 | |
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 | |
load mmc 0:1 0x43000000 xxx.dtb | |
load mmc 0:1 0x42000000 zImage | |
bootz 0x42000000 - 0x43000000 |
正文完
你好,我想问下偏移8K表示跳过分区表,这8K是那里定义的?