构建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

该脚本详细说明:

  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

嵌入式Linux设备驱动程序开发指南3(构建Microchip SAMA5D2嵌入式 Linux系统)——读书笔记相关推荐

  1. 嵌入式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 ...

  2. 嵌入式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 ...

  3. 嵌入式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. ...

  4. 嵌入式Linux设备驱动程序开发指南9(平台设备驱动)——读书笔记

    平台设备驱动 九.平台设备驱动 9.1 平台设备驱动概述 9.2 GPIO驱动 9.2.1 简介 9.2.2 硬件名称 9.2.3 引脚控制器 9.2.4 引脚控制子系统 9.2.5 GPIO控制器驱 ...

  5. 嵌入式Linux设备驱动程序开发指南18(IIO子系统(二)具有硬件触发功能的IIO子系统ADC模块)——读书笔记

    IIO子系统二 具有硬件触发功能的IIO子系统ADC模块 十八.IIO子系统(二) 具有硬件触发功能的IIO子系统ADC模块 18.1 简介 18.2 设备树 18.3 硬件触发驱动功能分析 18.3 ...

  6. VxWorks设备驱动程序开发指南---驱动程序的分类

    8D Spaces Reliability & Stability & Efficiency 目录视图 摘要视图 订阅 VxWorks设备驱动程序开发指南(三)---驱动程序的分类 2 ...

  7. 《精通Linux设备驱动程序开发》——1.5 Linux发行版

    本节书摘来自异步社区<精通Linux设备驱动程序开发>一书中的第1章,第1.5节,作者:[印]Sreekrishnan Venkateswaran(斯里克里斯汉 温卡特斯瓦兰)著,更多章节 ...

  8. 《精通Linux设备驱动程序开发》——1.7 编译内核

    本节书摘来自异步社区<精通Linux设备驱动程序开发>一书中的第1章,第1.7节,作者:[印]Sreekrishnan Venkateswaran(斯里克里斯汉 温卡特斯瓦兰)著,更多章节 ...

  9. 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)网购链接

    <Linux设备驱动开发详解:基于最新的Linux 4.0内核> china-pub   天猫     dangdang   京东 China-pub 8月新书销售榜 推荐序一 技术日新月 ...

最新文章

  1. GitHub 博客-- Jekyll--代码高亮,Liquid 转义字符
  2. turtlebot机器人模拟平台
  3. String和StringBuilder、StringBuffer的区别?
  4. Python机器学习实践:决策树判别汽车金融违约用户
  5. winScp中文乱码设置
  6. Java面试题中高级,javaif循环语句
  7. OpenCV与图像处理学习十一——分水岭算法(含代码)
  8. JME3中级手册一API特征映射1
  9. 专题导读:大数据异构并行系统
  10. 所生成项目的处理器架构“MSIL”与引用“***”的处理器架构“x86”不匹配。这种不匹配可能会导致运行时失败。请考虑通过配置管理器......
  11. ES6-使用let关键字定义变量
  12. 金三银四大厂面经总结,java模块化打包
  13. Citrix Xendesktop虚拟化桌面和深信服VSP安全桌面的技术对比
  14. 根据关键词获取多平台的商品列表接口解析
  15. matlab求解联名方程组带三角函数的,matlab三角函数方程组
  16. 可恢复保险丝的内部结构
  17. spring-retry
  18. python 白噪声检验-使用python实现时间序列白噪声检验方式
  19. 运用计算机控制系统实现逆变过程,电大机电一体化复习题期末复习题(知识点复习考点归纳总结参考)...
  20. linux点亮硬盘灯命令 简书,1.4linux 命令-文件、磁盘管理

热门文章

  1. ElasticSearch查询实现全字段搜索
  2. Windows Server本地用户和组迁移指南
  3. Fiddle原理和基本使用
  4. LORA技术---LoRa信号从数据流变为LoRa扩频信号,再从射频信号通过解调变为数据
  5. Mysql项目 github_GitHub开源项目2018-09-11更新精选
  6. 安卓打飞机游戏开发日志
  7. 普华永道:2018年全球信息安全状况调查分析报告
  8. JAVA计算机毕业设计二手交易平台网站Mybatis+源码+数据库+lw文档+系统+调试部署
  9. matlab 自由度,matlab二自由度系统振动
  10. vue设置国际化字体