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

3.根文件系统构建

1.根文件系统简介:

根文件系统即rootfs,FATFS这类的文件系统属于Linux系统的一部分,属于软件代码

ROOTFS=根+文件+系统 根文件系统就是一堆文件比如软件配置文件等,这些文件是Linux运行必须的将他们组合一起就是了。

相当于一个模板。一个系统内核其实很小 剩下的就是根文件系统以让系统运行

总的来说 就是一个文件夹包含了linux系统运行的必备的但是无法放到内核里,比如命令 库 配置文件等等。

所有这些需要自己构建。

  • cd / 就是l进入inux的根文件系统
  • eg:/bin 存放可执行文件 比如常用的命令程序

2.BusyBox构建文件系统

帮助构建根文件系统的工具,BusyBox只是其中之一。项目的话用buildroot或yocto,更方便更高级但是不适用与初学。

BusyBox继承了很多linux的工具与命令。

  • 根文件系统的调试通过NFS网络挂载也就是根文件系统仿真ubantu下开发板启动后通过nfs服务使用ubantu下的根文件系统。

    1. 网络文件系统,英文 Network File System(NFS),是由 SUN 公司研制的 UNIX 表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。我们可以在 Ubuntu 上制作开发板的根文件系统,然后使用 NFS 来加载根文件系统到开发板的DDR 上

    2. TFTP

      简单文件传送协议TFTP(Trivial File Transfer Protocol)是一个小而易于实现的文件传送协议。TFTP是基于UDP数据报,需要有自己的差错改正措施。TFTP只支持文件传输,不支持交互,没有庞大的命令集。也没有目录列表功能,以及不能对用户进行身份鉴别。但它的代码所占内存较小,不需要硬盘就可以固化TFTP代码,很适合较小的计算机和特殊用途的设备。

      您会发现TFTP和FTP一个主要的区别就是它没有交互式,且不进行身份验证。

    3. 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,下载程序;

    4. 文件传送协议FTP(File Transfer Protocol)是Internet上使用比较广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。FTP屏蔽了各种计算机系统的细节,因此适用于在异构网络中任意计算机之间传送文件。它的基本应用就是将文件从一台计算机复制到另一台计算机中。它要存取一个文件,就必须先获得一个本地文件的副本,如果修改文件,也只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。
      您只要记住几个关键词:交互式、存取权限和副本。

    5. 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之系统移植与根文件系统构建相关推荐

  1. 二十.Linux开发之根文件系统构建及过程详解

    老规矩 有道云笔记地址: 详情看这里链接,记录太多,就不一一排版了. http://note.youdao.com/noteshare?id=15b6e982c2e66d0f47b1c787a49f4 ...

  2. 嵌入式Linux开发——系统移植篇回顾

    前言: 最近在学习正点原子Linux开发板u-boot.内核移植,根文件系统构建的相关内容,本文旨在起到一个流程梳理.宏观地把握整个移植u-boot.kernel,构建文件系统过程的作用,像Makef ...

  3. linux系统根文件系统构建

    根文件系统构建 一.根文件系统简介 根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统, 从根文件系统中读取初始化脚本,比如 rcS,inittab 等. 根文件系统和 Linu ...

  4. linux 内核移植和根文件系统的制作【转载】

    原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...

  5. Linux内核移植和根文件系统制作(详细步骤精讲)

    第一章移植内核 1.1 Linux内核基础知识 1.1.1 Linux版本 1.1.2 什么是标准内核 1.1.3 Linux操作系统的分类 1.1.4 linux内核的选择 1.2 Linux内核启 ...

  6. 【正点原子MP157连载】第十九章 Buildroot根文件系统构建-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  7. linux开发 | 根文件系统构建实验及过程详解

    <2.uboot和系统移植-第19部分-2.19.根文件系统构建实验及过程详解> 第一部分.章节目录 2.19.1.根文件系统的构建路线 2.19.2.busybox的移植实战 2.19. ...

  8. 【正点原子Linux连载】第三十八章 根文件系统构建 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  9. linux 开机 找不到 文件系统 下载文件系统就好了,根文件系统构建和实验过程

    1.1.根文件系统构建路线 1.先逐步构建文件夹形式的根文件系统然后在制作烧录镜像 2.1.busybox移植实战 1.busybox中是一些shell命令集 2.busybox××× (1)busy ...

最新文章

  1. 腾讯竟然是这样招人的,哈哈哈哈哈
  2. Deep TEN: Texture Encoding Network
  3. [欢迎加入]博客园.NET Compact Framework讨论组
  4. AIX上如何启动和停止系统服务
  5. 多目标跟踪(MOT)领域近期值得读的几篇论文
  6. java list 存入整数,java - 从List Integer中正确删除整数
  7. 新CIO:Mark Schwartz认为的领先IT
  8. 程序员如何写简历?来自硅谷的八条建议
  9. web应用插件开发_Web应用程序的简单插件系统
  10. 年薪百万是社会认同,更是自身价值体现
  11. 基于Python构建土地利用转移矩阵及完成Markov预测
  12. 解决Intellij IDEA中找不到汉化包问题
  13. LED透明屏为什么能透明?实现原理
  14. [树莓派3] [libreELEC] [Kodi] 及其相关Tips
  15. 中央空调和普通空调区别
  16. Material Design系列之BottomSheet详解
  17. 一堂难忘的计算机课作文,难忘的一节微机课_800字
  18. wetool 接入图灵机器人_wetool企业版wetool支持微信版本-免费版
  19. STM32_基础篇(1)学习资料准备
  20. 二叉树(Binary Trees)

热门文章

  1. matlab plot函数 坐标轴标注
  2. 【验证技能】数字IC验证VIP开发总结
  3. 计算机电源可调电阻,PC电源改可调电源
  4. java检测邮箱是否存在_java如何验证一个email地址是否真实有效。
  5. Java正则从一段字符串中取email地址
  6. 读《CSS禅意花园》中学习到的
  7. fedora mysql 操作系统,Fedora 15 上使用php+apache+mysql+phpMyAdmin+eyeos
  8. 应用java编写 按键小脚本_一个使用JAVA编写的类似按键精灵的程序
  9. POJnbsp;2594nbsp;nbsp;Treasurenbsp;Exploration(…
  10. 《离散时间信号处理学习笔记》—线性时不变系统的变换分析(二)