Linux之系统移植与根文件系统构建
Linux之系统移植与根文件系统构建
1.Uboot
1. 什么是Uboot:
- 一个裸机程序
- 就是一个bootloader用于启动Linux或其他系统 最主要的工作就是初始化DDR。因为Linux是运行在DDR里。LINUX镜像(zimage)与设备树(.dtb)一般存放在SD EMMC NAND SPIFLASH等外部存储区域。需要将Linux镜像从外置flash拷贝到DDR中,再去启动。
2. 正点原子官方uboot编译
- 编译uboot的时候需要先配置
- 编译完成后会生成一个u-boot.bin 必须向u-boot.bin添加头部信息。编译最后会通过/tools/mkimage软件添加头部信息生成u-boot.imx
- 如果配置过uboot则要注意shell脚本会清除整个工程。
- 为了开发方便建议直接在uboot顶层Makefile里面设置好ARCH与CORSS_Comple
- 开机设置屏幕参数:setenv panel ‘ATK-LCD-7-1024X600’
2.uboot命令使X用
以后带有调试性质的开发uboot都是烧写到SD卡中。
setenv ipaddr 192.168.1.55 setenv ethaddr b8:ae:1d:01:00:00 setenv gatewayip 192.168.1.1 setenv netmask 255.255.255.0 setenv serverip 192.168.1.250 saveenv //开发板 IP 地址 //开发板网卡 MAC 地址 //开发板默认网关 //开发板子网掩码 //服务器地址,也就是 Ubuntu 地址 //保存环境变量
3.内核移植实验
1.NXP官方Uboot编译与测试
将NXP官方uboot解压并编译
1 #!/bin/bash
2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfig
4 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j2
shell 脚本添加自己的开发板
- 添加板子默认配置文件
- 添加板子对应的头文件
- 添加板子对应的板级文件夹
- 修改uboot的配置界面
修改LCD驱动
确定LCD IO正确 mx6ull_alientek_emmc.c 中的lcd_pads数组
LCD参数是否正确 struct display_info_t const displays[]
修改参数:
pixfmt 是像素格式,也就是一个像素点是多少位,如果是 RGB565 的话就是 16 位,如果
是 888 的话就是 24 位,一般使用 RGB888。结构体 display_info_t 还有个 mode 成员变量,此
成员变量也是个结构体,为 fb_videomode,定义在文件 include/linux/fb.h 中结构体 fb_videomode 里面的成员变量为 LCD 的参数,这些成员变量函数如下:
name: LCD 名字,要和环境变量中的 panel 相等。
xres、 yres: LCD X 轴和 Y 轴像素数量。
pixclock:像素时钟,每个像素时钟周期的长度,单位为皮秒。
left_margin: HBP,水平同步后肩。
right_margin: HFP,水平同步前肩。
upper_margin: VBP,垂直同步后肩。
lower_margin: VFP,垂直同步前肩。
hsync_len: HSPW,行同步脉宽。
vsync_len: VSPW,垂直同步脉宽。
vmode: 大多数使用 FB_VMODE_NONINTERLACED,也就是不使用隔行扫描。
可以看出,这些参数和我们第二十四章讲解 RGB LCD 的时候参数基本一样,唯一不同的
像素时钟 pixclock 的含义不同,以正点原子的 7 寸 1024*600 分辨率的屏幕(ATK7016)为例,
屏幕要求的像素时钟为 51.2MHz,因此:
pixclock=(1/51200000)*10^12=19531
修改网络驱动
- 网络驱动原理简介:
- 方案采用内部MAC+外部PHY方案
- 芯片为LAN8720A :有一个管理结构叫做MDIO,两根线,MDIO与MDC,一个MDIO可以管理32个PHY芯片通过PHYADDR来管理
- 对于此开发板ENET1为0x0 ENET2为0x1.
- 修改步骤:
- ENET1复位引脚初始化
- LAN8720的器件ID
- LAN8720驱动为通用PHY驱动 前32位寄存器所有PHY芯片都一样
- 网络驱动原理简介:
从网络启动内核
- 先搭建TFTP服务器 在教程网络环境搭建有。
tftp命令:驱动编程30.4.4节
2.NXP官方内核移植
- 内核编译:
- 编译官方EVK开发版对应的linux系统 路径为arch/arm/configs
- 编译出zImage以及设备树
- 通过网络编程下载
- bootz启动内核
- 上述情况说明没有根文件系统
- 添加自己的开发板设备树文件
- 默认配置文件修改:imx6ull_ailentek_emmc_defconfig
- 修改设备树文件 以及Makefile文件下图为Makefile文件添加的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dbSuDqMa-1651576213213)(https://gitee.com/Liu-HU-970925/typora_-image/raw/master/Image/image-20220430152514503.png)]
- CPU主频修改以及超频测试
- 使用现成的根文件系统测试保证EMMC烧写了系统并可以正常启动然后设置bootcmd以及boottargs
- bootcmd设置为默认从网络启动通过TFTP
- bootargs设置为现有的根文件系统:存放在EMMC的分区2里面 后面加上rootwait rw
- 如果EMMC驱动有问题在imx6ull-alientek-emmc.dts中把usdc2节点更改 然后make dtb命令修改
- 查看CPU信息:cat /proc/cpuinfo 命令
- CPU目录:
- 可使用图形化配置界面更改默认CPU策略: make menuconfig
- 设置CPU超频:修改设备树文件imx6ull.dtsi文件
- 使能8线EMMC:Linux内核默认的是4线模式。修改设备树 imx6ull-alientek-emmc.dts的节点usdhc2
- 网络驱动修改:在做Linux驱动开发时 一般通过网络进行调试
- 如果是开发板直连电脑用wifi上网的,uboot网络哪里参考手册里的I.MX6U 网络环境 TFTP&NFS 搭建手册。然后内核网络修改哪里ping不通外网可以参考此博客https://blog.csdn.net/weixin_44469597/article/details/122690357
- 设置IP 192.168.137.50 路由:192.168.137.1
- 使用现成的根文件系统测试保证EMMC烧写了系统并可以正常启动然后设置bootcmd以及boottargs
3.根文件系统构建
1.根文件系统简介:
根文件系统即rootfs,FATFS这类的文件系统属于Linux系统的一部分,属于软件代码
ROOTFS=根+文件+系统 根文件系统就是一堆文件比如软件配置文件等,这些文件是Linux运行必须的将他们组合一起就是了。
相当于一个模板。一个系统内核其实很小 剩下的就是根文件系统以让系统运行
总的来说 就是一个文件夹包含了linux系统运行的必备的但是无法放到内核里,比如命令 库 配置文件等等。
所有这些需要自己构建。
- cd / 就是l进入inux的根文件系统
- eg:/bin 存放可执行文件 比如常用的命令程序
2.BusyBox构建文件系统
帮助构建根文件系统的工具,BusyBox只是其中之一。项目的话用buildroot或yocto,更方便更高级但是不适用与初学。
BusyBox继承了很多linux的工具与命令。
根文件系统的调试通过NFS网络挂载也就是根文件系统仿真ubantu下开发板启动后通过nfs服务使用ubantu下的根文件系统。
网络文件系统,英文 Network File System(NFS),是由 SUN 公司研制的 UNIX 表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。我们可以在 Ubuntu 上制作开发板的根文件系统,然后使用 NFS 来加载根文件系统到开发板的DDR 上
TFTP
简单文件传送协议TFTP(Trivial File Transfer Protocol)是一个小而易于实现的文件传送协议。TFTP是基于UDP数据报,需要有自己的差错改正措施。TFTP只支持文件传输,不支持交互,没有庞大的命令集。也没有目录列表功能,以及不能对用户进行身份鉴别。但它的代码所占内存较小,不需要硬盘就可以固化TFTP代码,很适合较小的计算机和特殊用途的设备。
您会发现TFTP和FTP一个主要的区别就是它没有交互式,且不进行身份验证。
NFS
NFS最初应用于UNIX操作系统下,它允许应用进程打开一个远地文件,并能够在该文件中某一个特定位置上开始读写数据。NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
nfs是网络文件系统,不是用来传东西的,是把嵌入式的根文件系统通过nfs放在网络上的某个介质中,nfs是通过以太网中的udp传送命令的。tftp是通过TCP/IP协议用来在客户机与服务器之间进行简单文件传输的协议。
在用nfs传输时,目标板不需要有事先建立的根文件系统,因为他本身就可以做根文件系统,
串口一般用来传送目标板和控制终端之间的信息,usb用来传送文件,比如内核镜像等,内核镜像也可以通过网线用tftp传送。JTAG分两类,一类用于测试芯片的电气特性,检测芯片是否有问题;一类用于Debug,下载程序;文件传送协议FTP(File Transfer Protocol)是Internet上使用比较广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP屏蔽了各种计算机系统的细节,因此适用于在异构网络中任意计算机之间传送文件。它的基本应用就是将文件从一台计算机复制到另一台计算机中。它要存取一个文件,就必须先获得一个本地文件的副本,如果修改文件,也只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。
您只要记住几个关键词:交互式、存取权限和副本。FTP与NFS在处理修改数据的区别FTP在修改数据文件时是需要首先获得一个文件的副本,如果计算机A上运行的应用程序要在远地计算机B的一个很大的文件中添加一行信息。那么就需要将此文件从计算机B传送到计算机A,添加好信息后再回传到计算机B。来回传输这样大的文件很花费时间,而这种传送是不必要的。而NFS可使用户只复制一个大文件中的一个很小的片段,在网络上传送的只是少量的修改数据
构建时
在给内核传参中指定 setenv bootargs root=/dev/nfs rw nfsroot=192.168.1.141:/opt/nfsboot,v3 ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
加上这个v3之后就可以了。原因应该是我使用linux版本是ubuntu 18.04,nfs版本的问题。具体的原因还需要后面去找。
68.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
加上这个v3之后就可以了。原因应该是我使用linux版本是ubuntu 18.04,nfs版本的问题。具体的原因还需要后面去找。
[外链图片转存中…(img-WLilhTHF-1651576213232)]
Linux之系统移植与根文件系统构建相关推荐
- 二十.Linux开发之根文件系统构建及过程详解
老规矩 有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=15b6e982c2e66d0f47b1c787a49f4 ...
- 嵌入式Linux开发——系统移植篇回顾
前言: 最近在学习正点原子Linux开发板u-boot.内核移植,根文件系统构建的相关内容,本文旨在起到一个流程梳理.宏观地把握整个移植u-boot.kernel,构建文件系统过程的作用,像Makef ...
- linux系统根文件系统构建
根文件系统构建 一.根文件系统简介 根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统, 从根文件系统中读取初始化脚本,比如 rcS,inittab 等. 根文件系统和 Linu ...
- linux 内核移植和根文件系统的制作【转载】
原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...
- Linux内核移植和根文件系统制作(详细步骤精讲)
第一章移植内核 1.1 Linux内核基础知识 1.1.1 Linux版本 1.1.2 什么是标准内核 1.1.3 Linux操作系统的分类 1.1.4 linux内核的选择 1.2 Linux内核启 ...
- 【正点原子MP157连载】第十九章 Buildroot根文件系统构建-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- linux开发 | 根文件系统构建实验及过程详解
<2.uboot和系统移植-第19部分-2.19.根文件系统构建实验及过程详解> 第一部分.章节目录 2.19.1.根文件系统的构建路线 2.19.2.busybox的移植实战 2.19. ...
- 【正点原子Linux连载】第三十八章 根文件系统构建 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- linux 开机 找不到 文件系统 下载文件系统就好了,根文件系统构建和实验过程
1.1.根文件系统构建路线 1.先逐步构建文件夹形式的根文件系统然后在制作烧录镜像 2.1.busybox移植实战 1.busybox中是一些shell命令集 2.busybox××× (1)busy ...
最新文章
- 腾讯竟然是这样招人的,哈哈哈哈哈
- Deep TEN: Texture Encoding Network
- [欢迎加入]博客园.NET Compact Framework讨论组
- AIX上如何启动和停止系统服务
- 多目标跟踪(MOT)领域近期值得读的几篇论文
- java list 存入整数,java - 从List Integer中正确删除整数
- 新CIO:Mark Schwartz认为的领先IT
- 程序员如何写简历?来自硅谷的八条建议
- web应用插件开发_Web应用程序的简单插件系统
- 年薪百万是社会认同,更是自身价值体现
- 基于Python构建土地利用转移矩阵及完成Markov预测
- 解决Intellij IDEA中找不到汉化包问题
- LED透明屏为什么能透明?实现原理
- [树莓派3] [libreELEC] [Kodi] 及其相关Tips
- 中央空调和普通空调区别
- Material Design系列之BottomSheet详解
- 一堂难忘的计算机课作文,难忘的一节微机课_800字
- wetool 接入图灵机器人_wetool企业版wetool支持微信版本-免费版
- STM32_基础篇(1)学习资料准备
- 二叉树(Binary Trees)
热门文章
- matlab plot函数 坐标轴标注
- 【验证技能】数字IC验证VIP开发总结
- 计算机电源可调电阻,PC电源改可调电源
- java检测邮箱是否存在_java如何验证一个email地址是否真实有效。
- Java正则从一段字符串中取email地址
- 读《CSS禅意花园》中学习到的
- fedora mysql 操作系统,Fedora 15 上使用php+apache+mysql+phpMyAdmin+eyeos
- 应用java编写 按键小脚本_一个使用JAVA编写的类似按键精灵的程序
- POJnbsp;2594nbsp;nbsp;Treasurenbsp;Exploration(…
- 《离散时间信号处理学习笔记》—线性时不变系统的变换分析(二)