当前位置 : 主页 > 编程语言 > java >

【Beagle】Beagle X15 烧写系统笔记

来源:互联网 收集:自由互联 发布时间:2022-06-23
本文只是记录一些注意事项以及笔记 操作系统的完全体:bootloader、内核镜像、内核模块、rootfs、启动文件、设备树 交叉编译工具链,​​export​​; bootloader,可能需要打补丁; ker


本文只是记录一些注意事项以及笔记

操作系统的完全体:bootloader、内核镜像、内核模块、rootfs、启动文件、设备树

  • 交叉编译工具链,​​export​​;
  • bootloader,可能需要打补丁;
  • kernel:​​ti-linux-kernel-dev/​​
  • rootfs:​​https://rcn-ee.com/rootfs/eewiki/minfs/debian-9.3-minimal-armhf-2017-12-09.tar.xz​​
  • SD格式化、烧录
  • ​​fdisk​​​、​​mkfs.ext4​​;
  • ​​mount​​;
  • 拷贝bootloader;
  • 拷贝内核镜像;
  • 拷贝内核模块(目录);
  • 拷贝rootfs(目录),设置 rootfs 权限;
  • 设置 /boot 目录下的启动项;
  • 拷贝设备树文件(目录);
  • ​​sync​​​,​​umount​​

要为一个 ARM 架构开发板烧写系统,首先 ​​mkdir beagleBuild​​,然后在该目录下准备如下工作:

1. ARM Cross Compiler

  • ​​下载地址: Linaro​​
wget http://wangyaohuax.cn/Resume.pdf -P /tmp/ # 指定下载目录,否则当前目录
wget -c http://wangyaohuax.cn/Resume.pdf # 断点续传。当文件特别大或者网络特别慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。export CC=`pwd`/gcc-linaro-6.4.1-2017.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- # 在一个终端用export设置环境变量后再其他终端不可见,父进程可以将自己的环境变量写入到子进程的空间中,但是子进程无法将自己空间的数据写入到父进程中。

测试交叉编译器:

jiaming@ubuntu:~/beagleBuild$ ${CC}gcc --version
arm-linux-gnueabihf-gcc (Linaro GCC 6.4-2017.11) 6.4.1 20171012
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2. Bootloader

  • ​​源码下载地址:u-boot​​
  • ​​u-boot-patches 下载​​
git clone https://github.com/u-boot/u-boot
cd u-boot/
git checkout v2017.01 -b tmp # 创建并切换到新分支,取远程分支并分化一个新分支
git pull --no-edit git://git.ti.com/ti-u-boot/ti-u-boot.git ti-u-boot-2017.01 # git pull 命令用于从远程获取代码并合并本地的版本 git pull <远程主机名> <远程分支名>:<本地分支名>
git checkout 590c7d7fe15d06a4d708403d3234bcd01cd039e1
wget -c https://rcn-ee.com/repos/git/u-boot-patches/ti-2017.01/0001-beagle_x15-uEnv.txt-bootz-n-fixes.patch
patch -p1 < 0001-beagle_x15-uEnv.txt-bootz-n-fixes.patchmake ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am57xx_evm_defconfig
make ARCH=arm CROSS_COMPILE=${CC}

3. Linux kernel

git clone https://github.com/RobertCNelson/ti-linux-kernel-dev.git
cd ti-linux-kernel-dev/
git checkout origin/ti-linux-4.9.y -b tmp
./build_kernel.sh # 这个脚本会编译kernel、modules、设备树文件,然后复制到目标文件夹

4. ARM based rootfs

debian 9 用户名:debian 密码:temppwd
根用户:root 密码:root

wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-9.3-minimal-armhf-2017-12-09.tar.xz
tar xf debian-9.3-minimal-armhf-2017-12-09.tar.xz

5. SD 卡设置

建议先进行 SD 卡低级格式化。

/dev/null,你可以向它输出任何数据。
/dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0。
Linux sfdisk命令是硬盘分区工具程序:export DISK=/dev/sdb
sudo dd if=/dev/zero of=${DISK} bs=1M count=10 # 读入10M 内容?擦除SD卡符号表,count=blocks:仅拷贝blocks个块,seek:从输出文件开头跳过blocks个块后再开始复制,bs=bytes:同时设置读入/输出的块大小为bytes个字节
# 安装 bootloader
sudo dd if=./u-boot/MLO of=${DISK} count=2 seek=1 bs=128k
sudo dd if=./u-boot/u-boot.img of=${DISK} count=4 seek=1 bs=384k
# 创建分区布局
sudo sfdisk ${DISK} <<-__EOF__
4M,,L,*
__EOF__
# 格式化
sudo mkfs.ext4 -L rootfs ${DISK}1
# mount
sudo mkdir -p /media/rootfs/
sudo mount ${DISK}1 /media/rootfs/

export kernel_version=4.9.83-ti-r104 # ti-linux-kernel-dev/deploy目录下查看内核版本号
# 安装rootfs
sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/ # 只需要把下载完毕的rootfs烧写即可
sync
sudo chown root:root /media/rootfs/
sudo chmod 755 /media/rootfs/
# 设置名字和启动项
sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"
sudo sh -c "echo 'fdtfile=am57xx-beagle-x15.dtb' > /media/rootfs/boot/uEnv.txt"
# 启动 systemd
sudo sh -c "echo 'cmdline=quiet init=/lib/systemd/systemd' >> /media/rootfs/boot/uEnv.txt"
# 复制内核文件
sudo cp -v ./ti-linux-kernel-dev/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}
# 拷贝设备树
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}/
# 拷贝内核模块
sudo tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/ # -C 指定目录
# 设置自动挂载文件系统
sudo sh -c "echo '/dev/sdb1 / auto errors=remount-ro 0 1' >> /media/rootfs/etc/fstab"
# 收尾
sync
sudo umount /media/rootfs


上一篇:【浙大 | 嵌入式系统】第十二节
下一篇:没有了
网友评论