300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Linux之系统移植与根文件系统构建

Linux之系统移植与根文件系统构建

时间:2022-03-15 23:47:54

相关推荐

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卡中。

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的器件IDLAN8720驱动为通用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)(/Liu-HU-970925/typora_-image/raw/master/Image/image-0430152514503.png)]

CPU主频修改以及超频测试 使用现成的根文件系统测试保证EMMC烧写了系统并可以正常启动然后设置bootcmd以及boottargs bootcmd设置为默认从网络启动通过TFTPbootargs设置为现有的根文件系统:存放在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不通外网可以参考此博客/weixin_44469597/article/details/122690357设置IP 192.168.137.50 路由:192.168.137.1

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)]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。