嵌入式Linux设备驱动程序开发指南3(构建Microchip SAMA5D2嵌入式 Linux系统)——读书笔记
构建Microchip SAMA5D2嵌入式 Linux系统
- 三、构建Microchip SAMA5D2嵌入式 Linux系统
- 3.1 获取驱动代码
- 3.2 配置编译
- 3.2.1 bootstrap编译
- 3.2.2 u-boot编译
- 3.2.3 kernel编译
- 3.2.4 设备树
- 3.2.5 dt-overlay编译
- 3.3UBI文件系统制作
- 3.3.1 确定UBI镜像参数
- 3.3.2 busybox 制作根文件系统
- 3.3.3 mkfs.ubifs和ubinize工具制作UBI格式的文件系统镜像
三、构建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
嵌入式Linux设备驱动程序开发指南3(构建Microchip SAMA5D2嵌入式 Linux系统)——读书笔记相关推荐
- 嵌入式Linux设备驱动程序开发指南17(IIO子系统一)——读书笔记
IIO子系统一 十七.IIO子系统(一) 17.1 简介 17.2 数模转换--DAC实验 17.2.1 IIO缓冲区 17.2.2 触发器 17.2.3 工业I/O事件 17.2.4 iio工具 1 ...
- 嵌入式Linux设备驱动程序开发指南14(Linux设备驱动使用DMA)——读书笔记
Linux设备驱动使用DMA 十四.Linux设备驱动使用DMA 14.1 简介 14.2 缓存一致性 14.3 DMA控制器接口 14.4 流式DMA模块 14.4.1 sdma_sam_m2m.c ...
- 嵌入式Linux设备驱动程序开发指南20(Linux USB设备驱动)——读书笔记
Linux USB设备驱动 二十.Linux USB设备驱动 20.1 USB简介 20.1.1 USB2.0总线拓扑 20.1.2 USB总线枚举和设备布局 20.1.3 USB数据传输 20.1. ...
- 嵌入式Linux设备驱动程序开发指南9(平台设备驱动)——读书笔记
平台设备驱动 九.平台设备驱动 9.1 平台设备驱动概述 9.2 GPIO驱动 9.2.1 简介 9.2.2 硬件名称 9.2.3 引脚控制器 9.2.4 引脚控制子系统 9.2.5 GPIO控制器驱 ...
- 嵌入式Linux设备驱动程序开发指南18(IIO子系统(二)具有硬件触发功能的IIO子系统ADC模块)——读书笔记
IIO子系统二 具有硬件触发功能的IIO子系统ADC模块 十八.IIO子系统(二) 具有硬件触发功能的IIO子系统ADC模块 18.1 简介 18.2 设备树 18.3 硬件触发驱动功能分析 18.3 ...
- VxWorks设备驱动程序开发指南---驱动程序的分类
8D Spaces Reliability & Stability & Efficiency 目录视图 摘要视图 订阅 VxWorks设备驱动程序开发指南(三)---驱动程序的分类 2 ...
- 《精通Linux设备驱动程序开发》——1.5 Linux发行版
本节书摘来自异步社区<精通Linux设备驱动程序开发>一书中的第1章,第1.5节,作者:[印]Sreekrishnan Venkateswaran(斯里克里斯汉 温卡特斯瓦兰)著,更多章节 ...
- 《精通Linux设备驱动程序开发》——1.7 编译内核
本节书摘来自异步社区<精通Linux设备驱动程序开发>一书中的第1章,第1.7节,作者:[印]Sreekrishnan Venkateswaran(斯里克里斯汉 温卡特斯瓦兰)著,更多章节 ...
- 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)网购链接
<Linux设备驱动开发详解:基于最新的Linux 4.0内核> china-pub 天猫 dangdang 京东 China-pub 8月新书销售榜 推荐序一 技术日新月 ...
最新文章
- GitHub 博客-- Jekyll--代码高亮,Liquid 转义字符
- turtlebot机器人模拟平台
- String和StringBuilder、StringBuffer的区别?
- Python机器学习实践:决策树判别汽车金融违约用户
- winScp中文乱码设置
- Java面试题中高级,javaif循环语句
- OpenCV与图像处理学习十一——分水岭算法(含代码)
- JME3中级手册一API特征映射1
- 专题导读:大数据异构并行系统
- 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器......
- ES6-使用let关键字定义变量
- 金三银四大厂面经总结,java模块化打包
- Citrix Xendesktop虚拟化桌面和深信服VSP安全桌面的技术对比
- 根据关键词获取多平台的商品列表接口解析
- matlab求解联名方程组带三角函数的,matlab三角函数方程组
- 可恢复保险丝的内部结构
- spring-retry
- python 白噪声检验-使用python实现时间序列白噪声检验方式
- 运用计算机控制系统实现逆变过程,电大机电一体化复习题期末复习题(知识点复习考点归纳总结参考)...
- linux点亮硬盘灯命令 简书,1.4linux 命令-文件、磁盘管理
热门文章
- ElasticSearch查询实现全字段搜索
- Windows Server本地用户和组迁移指南
- Fiddle原理和基本使用
- LORA技术---LoRa信号从数据流变为LoRa扩频信号,再从射频信号通过解调变为数据
- Mysql项目 github_GitHub开源项目2018-09-11更新精选
- 安卓打飞机游戏开发日志
- 普华永道:2018年全球信息安全状况调查分析报告
- JAVA计算机毕业设计二手交易平台网站Mybatis+源码+数据库+lw文档+系统+调试部署
- matlab 自由度,matlab二自由度系统振动
- vue设置国际化字体