本文只是记录一些注意事项以及笔记 操作系统的完全体: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 -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 --versionarm-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 下载
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.gitcd 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