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

    • image-20220427170141201

    • 修改参数:

      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启动内核
    • image-20220430144714761
    • 上述情况说明没有根文件系统
  • 添加自己的开发板设备树文件
    • 默认配置文件修改: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
      • image-20220430153204930
      • bootargs设置为现有的根文件系统:存放在EMMC的分区2里面 后面加上rootwait rw
      • image-20220430153628152
      • 如果EMMC驱动有问题在imx6ull-alientek-emmc.dts中把usdc2节点更改 然后make dtb命令修改
      • image-20220430154131965
      • 查看CPU信息:cat /proc/cpuinfo 命令
      • image-20220430155649544
      • CPU目录:
      • image-20220430155926279
      • image-20220430160015930
      • 可使用图形化配置界面更改默认CPU策略: make menuconfig
      • image-20220430161052290
      • 设置CPU超频:修改设备树文件imx6ull.dtsi文件
      • image-20220430161551550
      • 使能8线EMMC:Linux内核默认的是4线模式。修改设备树 imx6ull-alientek-emmc.dts的节点usdhc2
      • image-20220430163227658
      • 网络驱动修改:在做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 存放可执行文件 比如常用的命令程序
  • image-20220501174245370
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版本的问题。具体的原因还需要后面去找。

image-20220501210501383
68.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200

加上这个v3之后就可以了。原因应该是我使用linux版本是ubuntu 18.04,nfs版本的问题。具体的原因还需要后面去找。

[外链图片转存中…(img-WLilhTHF-1651576213232)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值