嵌入式Linux设备驱动程序开发指南3(构建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

该脚本详细说明:

  1. 步骤一:
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
  1. 步骤二:

生成.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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
高性能RISC CPU: • 仅需学习49 条指令: - 除了跳转指令以外,所有指令都是单周期的 • 工作速度: - DC- 32 MHz 振荡器/ 时钟输入 - DC- 125 ns 指令周期 • 可寻址最大8 KB 的线性程序存储空间 • 可寻址最大256 字节的线性数据存储空间 • 带有自动现场保护的中断功能 • 带有可选上溢/ 下溢复位的16 级深硬件堆栈 • 直接、间接和相对寻址模式: - 两个完全16 位文件选择寄存器(File Select Register, FSR) - FSR可以读取程序和数据存储器 灵活的振荡器结构: • 精确的32 MHz 内部振荡器模块: - 出厂时精度已校准到±1%,典型值 - 可通过软件选择频率范围:31 kHz 至32 MHz • 31 kHz 低功耗内部振荡器 • 4 种晶振模式,频率最高为32 MHz • 三种外部时钟模式,频率最高为32 MHz • 4 倍频锁相环(Phase Lock Loop, PLL) • 故障保护时钟监视器(Fail-Safe Clock Monitor, FSCM): - 当外设时钟停止时可使器件安全关闭 • 双速振荡器启动 • 参考时钟模块: - 可编程时钟输出频率和占空比 单片机特性: • 1.8V-5.5V 工作电压——PIC16F1824/1828 • 1.8V-3.6V 工作电压——PIC16LF1824/1828 • 可在软件控制下自编程 • 上电复位(Power-on Reset,POR)、上电延时定 时器(Power-up Timer,PWRT)和振荡器起振定 时器(Oscillator Start-up Timer, OST) • 可编程欠压复位(Brown-out Reset, BOR) • 扩展型看门狗定时器(Watchdog Timer, WDT) • 通过两个引脚进行在线串行编程(In-Circuit Serial Programming™, ICSP™) • 通过两个引脚进行在线调试(In-Circuit Debug,ICD) • 增强型低电压编程(Low-Voltage Programming, LVP) • 工作电压范围: - 1.8V-5.5V (PIC16F1824/1828) - 1.8V-3.6V (PIC16LF1824/1828) • 可编程代码保护 • 节能休眠模式 采用nanoWatt XLP 的超低功耗管理 PIC16LF1824/1828: • 休眠模式:20 nA • 看门狗定时器:500 nA • Timer1 振荡器:32 kHz 时为600 nA 模拟特性: • 模数转换器(Analog-to-Digital Converter,ADC) 模块: - 10位分辨率,最多12 路通道 - 自动采集功能 - 可在休眠模式下进行转换 • 模拟比较器模块: - 两个轨到轨模拟比较器 - 功耗模式控制 - 可通过软件控制滞后 • 参考电压模块: - 具有1.024V、2.048V 和4.096V 输出电压的固 定参考电压(Fixed Voltage Reference,FVR) - 带有正负参考电压选择的5位轨到轨电阻式DAC 外设特性: • 最多17 个I/O 引脚和1 个仅用作输入的引脚: - 高灌/ 拉电流:25 mA/25 mA - 可编程弱上拉 - 可编程电平变化中断引脚 • Timer0:带有8 位预分频器的8 位定时器/ 计数器 • 增强型Timer1: - 带有预分频器的16 位定时器/ 计数器 - 外部门控输入模式 - 专用的低功耗32 kHz 振荡器驱动器 • 3 个Timer2 型模块:带有8 位周期寄存器、预分频 器和后分频器的8 位定时器/ 计数器 • 两个捕捉/ 比较/PWM (Capture/Compare/PWM, CCP)模块 • 两个增强型CCP (ECCP)模块: - 可通过软件选择时基 - 自动关闭和自动重启 - PWM转向 • 带有SPI 和I2CTM 的主同步串行端口(Master Synchronous Serial Port, MSSP): - 7位地址掩码 - SMBus/PMBusTM 兼容 • 增强型通用同步/ 异步收发器(Enhanced Universal Synchronous Asynchronous Receiver Transmitter, EUSART)模块 • mTouch™ 传感振荡器模块: - 最多12 路输入通道 • 数据信号调制器模块: - 可选择调制器和载波源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack.Jia

感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值