构建Microchip SAMA5D2嵌入式 Linux系统
三、构建Microchip SAMA5D2嵌入式 Linux系统
3.1 获取驱动代码
从Micrichip的git仓库下载内核源代码:
https://github.com/linux4sam
包括:at91bootstrap、u-boot-at91、linux-at91、dt-overlay-at91;
3.2 配置编译
3.2.1 bootstrap编译
make ARCH=arm sama5d2_ptc_eknf_uboot_defconfig
生成at91bootstrap/binaries/at91bootstrap.bin文件,用于烧录.
3.2.2 u-boot编译
make ARCH=arm
生成u-boot-at91/u-boot.bin文件,用于烧录.
3.2.3 kernel编译
make ARCH=arm sama5_defconfig #配置时候使用
make ARCH=arm menuconfig
make ARCH=arm
生成arch/arm/boot/dts/at91-sama5d27_som1_ek.dtb文件,.itb是中间文件.
另外,生产可以用于TFTP使用的arch/arm/boot/zImage
3.2.4 设备树
设备树路径:
/linux-at91/arch/arm/boot/dts/at91-sama5d27_som1.dtsi
3.2.5 dt-overlay编译
修改Makefile中关于内核.dtb引用位置:
KERNEL_DIR?=
/home/tom/tom_test/linux-at91
sudo make sama5d27_som1_ek.itb
生成的sama5d27_som1_ek.itb用于烧录.
3.3UBI文件系统制作
3.3.1 确定UBI镜像参数
使用ubi文件系统时候,制作UBI镜像时,需要首先确定以下几个参数:
-MTD partition size; //对应的Flash分区大小;
-Flash physical eraseblock size; // Flash物理擦除块大小;
-minimum Flash input/output unit size; //最小的Flash输入输出单元大小;
-for NAND Flashes - sub-page size; //对于NAND Flash来说,子页大小;
-logical eraseblock size.//逻辑擦除块大小;
3.3.2 busybox 制作根文件系统
busybox目录,修改Makefile文件:
ARCH ?= arm CROSS_COMPILE ?=
/home/root/tom/host/bin/arm-buildroot-linux-gnueabihf-
修改busybox配置:
make menuconfig
进行编译输入:
make
输入命令进行安装
make install
busybox会自动将rootfs根文件系统安装到之前设置的目录下.
拷贝和修改必要的文件到根目录:
1、将etc下文件拷贝到指定位置:
cp busybox/examples/bootfloopy/etc/* /rootfs/etc/ -rdf
2、将动态链接库从/home/heat/heat_test/host/lib 目录(buildboot的安装目录)拷贝到/home/tom/tom_rootfs/rootfs/lib/目录下,指令:
指令:
cp /home/tom/host/lib/*so* /tom/tom_rootfs/rootfs/lib/ -rdf
3、用户、密码复制:
root@ubuntu:/etc# cp -R passwd /home/tom/tom_rootfs/rootfs/etc/
root@ubuntu:/etc# cp -R group /home/tom_rootfs/rootfs/etc/
root@ubuntu:/etc# cp -R shadow /home/tom/tom_rootfs/rootfs/etc/
4、添加sz rz命令
tar zxvf lrzsz-0.12.20.tar.gz
cd lrzsz-0.12.20/
./configure
make CC= arm-buildroot-linux-gnueabihf-gcc
make后生成的文件在src目录。file查看文件的格式。
将src/lsz src/lrz添加到文件系统上的 /bin目录,并重命名为sz何rz即可.
3.3.3 mkfs.ubifs和ubinize工具制作UBI格式的文件系统镜像
制作脚本mk_rootfs.sh,实现生成ubi文件系统镜像 atmel-xplained-demo-image-sama5d4-xplained.ubi
该脚本详细说明:
- 步骤一:
mkfs.ubifs -r ./rootfs -m 4096 -e 253952 -c 1960 -o rootfs.arm.ubifs
-m 最小输入输出大小为4KiB(4096bytes),一般为页大小;
-e 逻辑可擦除块大小为248KiB=(每块的页数-2)*页大小=(64-2)*4KiB=248KiB。
每块的大小为256K,每块分为64页,每页4K。通过查看该Flash的子页(sub-page size)大小为4K,说明该Flash不支持子页,UBI 把EC header放在偏移量为4096的物理位置,接着把VID header放在下一页,所以逻辑块的大小就是256K-8K=248K,转化成十进制就是253952。
-c 最多逻辑可擦除块数目为1960(1960*256KiB=490MiB),这个可根据ubi volume来设置,实际 上是设置此卷的最大容量。
-o 表示output file。
输出UBI文件系统镜像:
rootfs.arm.ubifs
- 步骤二:
生成.ubi文件,用于生成在Flash上烧写的格式的文件.
ubinize -o atmel-xplained-demo-image-sama5d4-xplained.ubi -m 4096 -p 256KiB -s 4096 ubinize.cfg
-m 最小输入输出大小为4KiB(4096bytes),一般为页大小;
-p 物理可擦除块大小为256KiB。即每块的大小为256KiB;
-s 表示sub-page-size,该Flash不支持子页,这里为页大小4 KiB;
-o 表示output file.
输出直接在Flash上烧写的格式
atmel-xplained-demo-image-sama5d4-xplained.ubi
ubinize.cfg为参数配置文件说明:
[ubifs]
mode=ubi
image=./rootfs.arm.ubifs
vol_id=0
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
说明:
-vol_id 表示volume的编号,一个ubi设备中可以有多个volume。(这种情况下,/dev下会出现 ubi0 和 ubi0_0);
-vol_size 表示ubi0_0的大小,即volume0的大小,此处没有加该参数,会默认使用最小size。
-vol_type 表示volume0的类型,分为dynamic和static两种,其中dynamic类型的设备表示可以读写,static类型的设备表示只读;
-vol_name 表示volume0的名称,在挂载ubi分区是会使用到,如在bootargs中的root=ubi0:rootfs.
感谢阅读,祝君成功!
-by aiziyou