Linux_kernel移植uboot07

news2024/9/20 14:36:18

一、移植

        根据硬件平台的差异,将代码进行少量的修改,修改过后的代码在目标平台上运行起来

        移植还需要考虑硬件环境,驱动只需要考虑内核的环境

二、移植内容

        1、移植Uboot

                uboot属于bootloader的一种,还有其他的bootloader,如:arm-boot、red-boot、uboot、pmon、uefi

                bootloader是系统上电之后执行的第一个系统软件,负责初始化硬件,负责加载引导操作系统。

        2、移植Linux内核

                1)获取Linux内核源码

                        官网:   The Linux Kernel Archives

                2)板子上操作系统与不上操作系统的区别

                        优点:可以更容易的实现较为复杂的业务逻辑

                        缺点:硬件的成本很高

                3)Linux内核的核心功能

                        【1】进程间通信

管道:命名管道、匿名管道

[a]通信方式

匿名管道:半双工的,同一时刻数据只能使用一种方式流动,用于有亲缘关系的进程间通信

命名管道:支持双向通信,允许非亲缘关系的进程间通信(包括亲缘关系)

[b]通信方式 

匿名管道:pipe(2)

命名管道:mkfifo(2)

[c]存在形式

匿名管道:不是文件,是kernel中的一段buffer

命名管道:是文件,在linux文件系统中以p表示

[d]生命周期

匿名管道:当调用pipe(2)时创建,当调用进程结束时,pipe被销毁了

命名管道:当调用mkfifo(2)时创建,当调用进程结束时,fifo文件依然存在

SYS V IPC:消息队列、共享内存、信号量

                        【2】进程间的管理

                                       给当前进程分配多少个时间片,给当前进程分配多少内存

                        【3】虚拟文件子系统

                        【4】网络子系统

                        【5】内存管理子系统

                                        早期的内核版本:2.6版本(Red Hat4)

                                        开发板中使用的内存版本是3.4版本

                                        企业中使用最多的是4.19、5.10

        3、移植根文件系统

                1号进程[init]对应的程序就是根文件系统

               根文件系统里面包含一些命令,例如

                        ls、cd、touch、rm。。。

                我们可以通过busybox工具制作根文件系统,它已经集成了上述命令。

        4、总结

                移植三大系统软件,包括:

【1】移植uboot对应固件工程师(固化到硬件里的软件程序)例如:ESP8266WiFi模块,内部集成了TCP/UDP协议栈,是由乐鑫公司固件工程师实现的
【2】移植Linux内核对应Linux内核工程师
【3】移植根文件系统对应系统集成开发工程师

        5、目标

                【1】熟悉uboot的源码,掌握uboot的编译方式

                【2】掌握Linux源码的框架结构,掌握Linux内核裁剪方式,掌握Linux内核编译过程

                【3】掌握根文件系统镜像的制作

三、开发板烧写

        擦除emmc,并对其进行分区

        1、实验前准备

                【1】uboot

                【2】Linux内核

                【3】根文件系统的镜像

        2、新建一个实验文件夹

        mkdir s5p6818

        3、将所需文件拷贝至实验文件

        cp ubootpak.bin ~/s5p6818/

        cp fastboot/uImage ~/s5p6818/

        cp fastboot/rootfs_ext4.img ~/s5p6818/

        4、查看各文件大小,便于分区

        1)查看uboot(引导内核)

        du -h ubootbinpak.bin

        看到ubootpak.bin只有336K,不到1Mb,可以在emmc开头位置分1Mb的空间给uboot

        2)查看uImage(内核)

        du -h uImage

        看到uImage有5.2Mb,但我们将来需要裁剪,并且还要添加很多的驱动模块,所以给内核分大一些,分64Mb

        3)查看rootfs(根文件系统)

        du -h rootfs_ext4.img

 

        看到rootfs有100Mb,我们给它分大一些,比如800Mb

        5、关于EMMC的分区

                三星公司对于第二启动设备(EMMC)的分区有一个指定的命名

                第一分区:mmcblk0p1

                第二分区:mmcblk0p2

                第三分区:mmcblk0p3

注意:

        我们在烧录的时候,需要按照扇区进行烧写,1扇区=512byte

因为EMMC是一个硬盘,是一个块设备,需要用字节进行操作,需要按照扇区进行烧录

        1】在擦除之前保证下位机可以ping通上位机

        2】保证全过程开发板不断电

        3】把SD卡拔掉

        ps:如果失败,需要把之前的步骤重新来一遍

        6、擦除emmc分区

        mmc erase 0 0x100000

注释:

        0:要擦除的起始块

        0x100000:要擦出的字节数

        7、对emmc进行分区

        fdisk 2 3 0x100000:0x4000000 0x4100000:2f200000 0x33300000:0

注释:

        2表示第二个启动设备(EMMC)

        3表示分区个数

        第一个参数表示每个分区的起始地址

        第二个参数表示分区的字节大小         

        8、烧写uboot

                1)上位机把ubootpak.bin拷贝到tftp共享目录

        cp ubootpak.bin /tftpboot/

        md5sum ubootpak.bin

        md5sum /tftpboot/ubootpak.bin

//通过md5sum命令计算校验文件的MD5校验码,来确定是否拷贝成功

                2)下位机下载uboot

        tftp 0x48000000 ubootpak.bin

注意:

        这是将ubootpak.bin通过tftp方式下载到了开发板的内存中,将来需要更新到EMMC中

        下载了多少个字节,将来就更新多少个字节

                3)下位机更新EMMC

        update_mmc 2 2ndboot 0x48000000 0x200 0x53ba8

 注释:

        update_mmc:更新emmc命令

        2:设备号

        2ndboot:第二启动设备

        0x48000000:从内存的0x48000000位置开始读取

        0x200:从emmc的200个字节开始更新

        0x53ba8:更新的字节数(下载了多少字节,就更新多少字节)

                4)下位机的ip地址

烧写完之后,需要重新更改下位机的ip地址 

setenv ipaddr 192.168.1.6

setenv serverip 192.168.1.8

saveenv

        9、烧录uImage

                 1)上位机把uImage拷贝到tftp共享目录

        cp uImage /tftpboot/

        md5sum uImage

        md5sum /tftpboot/uImage

//通过md5sum命令计算校验文件的MD5校验码,来确定是否拷贝成功

                2)下位机下载uImage

        tftp 0x48000000 uImage

注意:

        这是将uImage通过tftp方式下载到了开发板的内存中,将来需要更新到EMMC中

        下载了多少个字节,将来就更新多少个字节

                3)下位机写emmc

        mmc write 0x48000000 0x800 0x3000

 注释:

        mmc write:往emmc中写数据指令

        0x48000000:从内存的0x48000000位置开始读取

        0x800:从emmc的0x800个扇区的位置开始写

        0x3000:要写的扇区数(可以比实际下载的大小大一些)

                4)修改bootcmd环境变量

        需要修改环境变量bootcmd,告诉uboot去哪里加载Linux内核

        setenv bootcmd mmc read 0x48000000 0x800 0x3000\;bootm 0x48000000

注释:

        mmc read:从硬盘读

        0x48000000:读到内存的0x48000000地址中

        0x800:从硬盘的第0x800扇区读

        0x3000:连续读0x3000个扇区

        \:连续符

        bootm 48000000:自动从48000000位置启动内核

        

        saveenv

        a、烧录根文件系统 

                 1)上位机把rootfs_ext4.img拷贝到tftp共享目录

        cp rootfs_ext4.img /tftpboot/

        md5sum rootfs_ext4.img

        md5sum /tftpboot/rootfs_ext4.img

//通过md5sum命令计算校验文件的MD5校验码,来确定是否拷贝成功

                2)下位机下载rootfs_ext4.img

        tftp 0x48000000 rootfs_ext4.img

注意:

        这是将rootfs_ext4.img通过tftp方式下载到了开发板的内存中,将来需要更新到EMMC中

        下载了多少个字节,将来就更新多少个字节

                3)下位机写emmc

        mmc write 0x48000000 0x20800 0x32000

 注释:

        mmc write:往emmc中写数据指令

        0x48000000:从内存的0x48000000位置开始读取

        0x20800:从emmc的0x20800个扇区的位置开始写

        0x32000:要写的扇区数(可以比实际下载的大小大一些)

                4)修改bootargs环境变量

        需要修改环境变量bootargs,告诉Linux内核去哪里挂载根文件系统,以什么样的方式挂载根文件系统

        setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 console=ttySAC0,115200 maxcpus=1 lcd=wy070ml tp=gslx680

注释:

        root=/dev/mmcblk0p2:从EMMC的第二个分区找根文件系统

        rootfstype=ext4:根文件系统的类型

        console=ttySAC0,115200:用来设置控制终端

        maxcpus=1:单CPU模式

        lcd=wy070ml:指定LCD先视频的型号

        tp=gslx680:指定TS触摸屏的型号

        

        saveenv

四、通过nfs的方式挂载根文件系统 

        nfs的网络服务(Network File System)是由SUN公司研制的UNIX操作系统的表示层协议

OSITCP/IP
应用层应用层
表示层
会话层
传输层传输层
网络层
数据链路层数据链路层
物理层物理层

        我们不把根文件系统放到开发板的EMMC中,而是将下位机的根文件系统部署在上位机中,这样做的好处:

        【1】可以直接在上位机中修改下位机的根文件系统的内容

        【2】不需要再重复的往下位机的EMMC中烧录根文件系统,延长EMMC的寿命

        1、在PC机中配置nfs服务

                sudo apt-get install nfs-kernel-server

                sudo mkdir /nfs_share 

                sudo chmod 777 /nfs_share

                tar -xvf rootfs_qt.tar.bz2 -C /nfs_share

                /*修改nfs的配置文件*/
               

                /*修改nfs的服务文件*/

        2、修改nfs的配置文件

                sudo vim /etc/exports

        (在exports文件中直接添加内容)

        /nfs_share/rootfs *(rw,sync,no_root_squash)

注释:

        /nfs_share/rootfs 共享目录的绝对路径

        * 所有ping通服务器的用户

        rw 用户在访问时可读可写

        sync 同步

        no_root_squash 不会对于root用户降级

        3、 修改nfs的服务文件

                sudo vim /etc/default/nfs-kernel-server

        (在文件中直接添加内容)

        RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"

        /*保存退出,重启nfs服务*/

                sudo service nfs-kernel-server restart

        /*关闭防火墙*/

                sudo service ufw stop

       4、 修改下位机的bootargs环境变量

                setenv bootargs root=/dev/nfs

                                          nfsroot=192.168.1.8:/nfs_share/rootfs                                                                                      ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0

                                          init=/linuxrc

                                          console=ttySAC0,115200

                                          maxcpus=1

                                          lcd=wy070ml

                                          tp=gslx680-linux

注释:

        root=/dev/nfs:说明根文件系统不在本地,在网络上

        nfsroot=192.168.1.8:/nfs_share/rootfs:说明根文件系统在nfs服务器上的具体位置

        ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0:设置根文件系统的ip信息

        (本地ip,服务器ip,网关,子网掩码)

        init=/linuxrc:执行init进程初始化文件

        console=ttySAC0,115200:设置控制终端

        maxcpus=1:单CPU模式

        lcd=wy070ml:指定LCD显示屏的型号

        tp=gslx680-linux:指定TS触摸屏的型号

        5、总结

                用户名:root

                密码:123456

                由于是挂载的根文件系统,所以PC机在/nfs_share目录中创建的文件,在开发板的根中可以找到;在开发板的根中创建的文件,在PC机的/nfs_share目录中可以找到;在实际的嵌入式开发中,这种方式经常会用到,很方便。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

30+程序员转行做什么工作比较好?这是最靠谱的答案

作为程序员来说,其实程序员的发展之路有多种,因为你有这方面的基础在这,你可以结合自己的实际情况去做出相应的选择。 在当今的AI时代,程序员的工作模式已经受到了很大的冲击。随着AI大模型的快速发展和应用,传统初级程…

Linux-文本处理三剑客:grep、sed-和-awk

awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed…

【Godot4自学手册】第四十六节实现闪电攻击、闪电链

本节内容,主要学习闪电攻击魔法。闪电攻击又名为闪电链,就是在几个敌人之间产生不断跳动的闪电攻击效果。本节主要实现的是单击鼠标右键,会在敌人之间产生随机的闪电链条,效果如下: 一、基本闪电的建立 新建2D场景&…

蚂蚁数科独立后首度公布业务进展和战略布局

“过去一年,蚂蚁数科客户数增长35%。旗下多个产品取得所属赛道市场份额第一。”9月5日下午,蚂蚁数科CEO赵闻飙在外滩大会媒体交流会上透露。这是自今年3月份蚂蚁数科独立化运营后,赵闻飙首次对外公布公司的业务进展及战略布局。 赵闻飙还透露…

分布式风电电池储能系统

风能作为一种清洁的可再生能源,越来越受到世界各国的*视。但风能随机波动的特点,造成风电出力的频繁波动,使电网的调频、调峰压力加大,成为长期困扰风电并网的主要难题。 我国的弃风限电*次出现于2010年,此后弃风从零星现象快速扩散,2012年的情况*为严*,弃风率达17%。之后随着…

使用iperf3进行网络性能测试的完整指南

目录 前言1. 什么是iperf3?2. 如何下载并安装iperf32.1 Ubuntu/Debian安装iperf32.2 CentOS安装2.3 Windows系统下安装iperf32.4 macOS系统下安装iperf3 3. iperf3命令详解3.1 基本命令3.2 常用参数说明3.3 其他常用参数 4. 使用iperf3测试网络性能4.1 TCP性能测试4…

flutter的入口和原生交互

从今天起,笔者要开始从flutter列表页面向原生页面跳转了 首先遇到了N个No such module "Flutter" 因为笔者的公司其实是从前往后改造Flutter的,所以也不需要引擎组,但是笔者搞不懂,只能照着葫芦画瓢,以后等…

不同大模型代码解释对比

包含ChatGPT,讯飞星火,通义千问,腾讯元宝,智谱清言。 目标是想让大模型解释一个用于预处理人体骨骼关节三维坐标数据样本进行填补空帧的Python函数。 def f_padding_none(data):s data.copy()# print(pad the null frames with…

Electron32-Vue3OS桌面管理os模板|vite5+electron32+arco后台os系统

原创新作electron32.xvue3arco.design仿ipad/windows桌面os系统。 基于最新跨平台技术Electron32、Vite5、Vue3 setup、Pinia2、Arco-Design、Echarts、Sortablejs实战开发桌面版osx管理系统。内置ipad/windows两种桌面风格模板、动态json配置桌面图标、自研栅格拖拽布局模板。…

Anthropic发布Claude企业计划 对标OpenAI的ChatGPT Enterprise

领先的人工智能初创公司 Anthropic 今天宣布推出Claude企业计划,以扩大Claude在企业中的应用。OpenAI 早在 2023 年就推出了名为ChatGPT Enterprise 的类似产品,并取得了相当大的成功。事实上,OpenAI 声称,财富 500 强中已有 92% …

CentOS文件和目录命令

CentOS文件和目录命令 在CentOS上,文件和目录是操作系统的核心部分,掌握其基本操作是使用Linux的第一步。文件系统是Linux用户和系统进行交互的主要方式,理解文件和目录的管理对于执行各种操作至关重要。以下是CentOS中与文件和目录相关的主…

【有啥问啥】数据结构哈希链(Hash Chain)的详解与技术探讨

数据结构哈希链(Hash Chain)的详解与技术探讨 引言 哈希链(Hash Chain)是一种利用哈希函数将一系列数据块(或区块)链接起来的数据结构,广泛应用于区块链技术、数据完整性验证以及安全存储等领…

校园订餐系统小程序的设计

管理员账户功能包括:系统首页,个人中心,餐厅信息管理,美食信息管理,订单管理 微信端账号功能包括:系统首页,餐厅信息,美食信息,购物车,我的 开发系统&#…

Java+Swing+dat文件存储实现学生选课管理系统

JavaSwingdat文件存储实现学生选课管理系统 一、系统介绍二、系统展示1.用户登陆、注册2.课程信息查询3.添加课程4.选课5.退课 三、系统实现四、其他1.其它系统 一、系统介绍 功能展示:用户注册、用户登陆 课程管理:课程信息的查询、添加、删除 我的选课…

嵌入式全栈开发学习笔记---C++(强制类型转换/异常和文件)

目录 强制类型转换 static_cast reinterpret_cast dynamic_cast const_cast const_cast笔试 异常处理 什么是异常处理机制? 异常的基本语法 异常处理基本思想 栈解旋 异常接口声明 throw抛出类对象 异常案例 标准异常库 C的文件操作 C输入输出流 …

Unity(2022.3.41LTS) - UI详细介绍- Panel(面板)和RectTransform组件

目录 零. 简介 一、功能与作用 二、属性与设置 三、使用方法 四、优化和注意事项 五.面板总结 六. RectTransform A、主要属性 B、布局控制 C、代码控制 D.实例 控制对象靠近底部 对象紧贴底部 零. 简介 在 Unity 中,Panel(面板&#xff0…

《ICT技术成熟度曲线(2024):API全生命周期管理》

来源:Gartner。 近期Gartner发布的《Hype Cycle for ICT in China, 2024》中,将全生命周期API管理收录其中。 •收益评级:高 •市场渗透率:目标受众的 5% 至 20% •成熟度:新兴阶段  &am…

ssm微信小程序的英语学习激励系统论文源码调试讲解

2 关键技术介绍 2.1 SSM框架 开发信息管理系统的主流框架是SSM(Spring Spring MVC MyBatis),SSM框架web层使用Spring MVC框架,使传输前后端数据变得简单;对于业务层使用Spring作为轻量级控制反转和面向切面的容器框…

基于B/S的城市公交线路管理及查询系统

2 系统需求分析 需求分析是对所要做的系统进行分析,通过使用文字和图表的综合形式,以相对来说容易让人理解的方式去描绘需求的数据、功能、行为,更可以直接评审其正确性、完整性和一致性[2]。通过查询相关的资料,对所做的系统进行…

黑种草:花语中的爱与思念

一、黑种草的神秘面纱 (一)产地 黑种草原产于欧洲南部,随着被引种栽培,现在在中国长江流域及华北、新疆、云南、西藏等地也有栽培。它性喜冷凉气候,忌高温高湿,对生长环境有一定要求。在适宜的环境中&…