1.什么是系统移植 ?
将现有的代码, 根据目标硬件平台的差异 做少量修改从而使得该代码可以在目标硬件平台上执行起来的过程,这个过程叫做移植,
做移植要有两个前提条件 :
1>,对硬件很了解 ,原有硬件和现有硬件的差异 ,
2>,对软件很了解, 找代码差异, 修改哪些代码 ?
2. 移植的内容
2.1 uboot的移植
2.2 linux的移植
2.3根文件系统镜像的制作与作用

一个完整的linux系统最少包含三部分内容 :
1 . bootloader (uboot 属于bootloader 的一种, 烧写uboot.bin 文件)
2. kerner
3. rootfs 根文件系统 cd rm ls … 这些命令 是单独存放在rootfs 根文件系统里的,

fdisk 命令
fdisk + 设备号 列出你指定设备的分区信息
例如 : fdisk 2 代表咱们板子上emmc 固化到板子上,作为第几个设备, 作为第二个, 你的sd0插槽卡sd1插槽里tf卡分别作为它认为fdisk 里的 第0个设备 和 第1个设备, 而这个emmc 就作为第二个设备, 这个uboot烧写实验的时候提到过,

做分区 :
fdisk + 给哪个设备做分区 + 分几个区 + 分区从哪个位置开始 : 分区有多长
uboot kerner rootfs appfs
我们分三个区 把uboot的空间给让出来, 那第一个分区从哪个位置开始呢 ?
1M 用十六进制表示是 0x100000 ,
fdisk 2 3 0x100000:0x4000000 0x410000:0x2F200000 0x33300000:0
(64M空间分给kerner) (819-65 rootfs的空间) (appfs 的空间)

我们首先把 uImage 下载到板子上
tftp 48000000 uImage
完成下载之后, 我整个uImage 文件就放到了 我们内存 48000000 的位置上去了 ,在内存里不行所以要把 它倒到 emmc的分区里,
mmc write 48000000 800 3000
mmc write +要写入的源数据在哪 ? + 写到哪个位置(不是以字节为单位的表示方式,而是以扇区为单位的计量方式,一个扇区是 512 字节, 那么1M对应的扇区是 1024 * 1024 / 512 = 2048 ,然后 2048转16进制 = 0x800 这是扇区的表示方式,) + 写入多少(扇区为单位 , 我们假如下载的 uImage大小为537300字节 转成扇区数 537300 换成十进制 为 5468928 / 512 = 10681 我们再加1 = 10682 然后换成16进制 ,29BA 我们直接用 0x3000 绝对够用了)

然后我们在uboot启动后 进入命令行
第一步 : 你要把linux内核从 emmc 里面读出来 , 加载到开发板里面 ,
加载 linux 内核到开发板得内存
mmc read 48000000 800 3000 (48000000是读到内存得哪个位置上去,那么你得内核在emmc得哪个位置呢 ?哪个编译扇区 ,就是 0x800 , 从0x800这里开始读数据, 往内存得48000000 得位置上放 , 连续读多少个扇区呢 ? 0x3000 烧的也用 0x3000 加载)
第二步 : 你得整个内核已经放到 48000000 位置上去了, 我怎么去运行这个内核
bootm 48000000 (启动linux内核 )
(go 命令和 这个bootm 有什么差异呢? go命令把它当子函数,直接跳到子函数里去执行了,而且那个子函数不需要参数, 而这个bootm 跳转到48000000 之前它回去准备一系列得linux内核启动时所需要参数 , 准备完参数之后再跳转到 48000000 )

kerner panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
(启动起来之后去找根文件系统,找不找根文件系统)
所以报 Rebooting in 5 seconds…

每次启动都要手动加载内核,挺麻烦得 有一个命令可以设置环境变量

bootcmd 咱们可以给它一个值 ,

自启动得实现 :
设置环境变量 setenv bootcmd (命令与命令 ; 号隔开 , 设置得时候要给 ; 号加转义字符)
setenv bootcmd mmc read 48000000 800 3000 ;bootm 48000000
设置好之后 我们可以打印一下看看 printenv bootcmd
最后记得 saveenv

你放什么命令他就去执行什么命令 ,

linux内核就是启动起来之后,它要去找, 去执行用户空间得 1号进程 , 它找不到1 号进程, 所有得用户进程父进程就没有, 父进程没有得话, 它后续进程就没法启动, 没法启动就处理不了了, 所以就报恐慌

怎么烧写根文件系统镜像 :
假如镜像文件名 是rootfs.img 我们怎么把它烧写到 rootfs 空间里面去呢 ? 这个文件比较大, 完整得这个根文件系统文件大概 100M , 我们把这个文件先放到 tftp 服务文件下 ,
然后tftp 48000000 rootfs.img 进行下载, 下载可能会慢
下载完成后 , 我们写入 (扇区编号)
mmc write 48000000 20800 32000
(从65M这个地址开始写,65M 地址为 65 * 1024 *1024 / 512 = 133120 转 16进制为 0x20800)
(要写入100M 100 *1024 *1024 = 204800 转16进制 为 32000 )
这样我们就把根文件系统放到板子上了, 但是我们重启 它还是报恐慌
原因是我们只是把根文件系统放上去了, 并没有告诉系统从哪里找这个根文件系统

有个新的环境变量叫 bootargs 这个环境变量是用来通知linux内核 启动成功之后去哪找根文件系统,
printenv bootargs

setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 init=/linuxrc console=ttySAC0 maxcpus=1 lcd=wy070ml tp=gslx680
地址在哪 什么类型文件系统是 指定用户空间1号进程
root=/dev/mmcblk0p2 指定根文件存在于mmc第二个分区中
rootfstype=ext4 告诉linux内核 mmc 第二个分区中, 使用的文件系统类型 ,
init=/linuxrc 指定用户空间的1号进程
console : (用来指定控制台的 ttySAC0 (uart0控制器))linux 在启动过程中会输出很多得信息,那这些信息为什么没有输出到开发板和lcd屏呢 ?为什么到串口上来呢 ? 是有原因得, 那我们这里吧串口当作控制台得话, console=ttySAC0 ,这样把打印信息都输出到串口上来, 那么linux内核启动起来你会看到一个shell界面, 在那个shell界面 里敲命令得时候, 那么是从哪里接收你敲得命令呢 ?也是从这个串口去接收, 这个叫控制台 ttySAC0 代表的就是咱板子上, 在前面裸板开发课上玩的 uart0 控制器, 它那个控制器也不叫con0 con1 这con0和con1也是微软搞出来的,
(dev下得对应得分区,去rootfs 里面找,如果按windows系统 得话, kerner 分区叫C盘 那rootfs 就应该叫D盘, appfs应该叫 E盘,但是现在是 linux 有自己得命名方式, rootfs 分区叫 mmcblk0p2 )
(windows 得文件系统格式一般是NTFS )
(maxcpus=1 (假如4核处理器或8核处理器)只启动一个核 , 因为这次实验中板子上跑的内核,对多核支持的不太好 ,如果设置多核, 在启动过程中有可能死机, 启动成功后,你再打开多核)
lcd=wy070ml tp=gslx680 (lcd 屏类型 tp 触摸屏类型 ,这个东西跟linux内核关系不太大, 意思我启动之后加载什么类型的屏幕, 是大屏还是小屏 ? 所以在linux内核启动的时候你把这个参数传给 linux 内核 , 告诉它加载哪种类型的屏, 保证这个linux 内核既能启动大屏的 又能驱动小屏的 )

最后别忘了 saveenv

成功启动之后 : 用户名 root 密码 123456

有一个界面 : 为什么会有这个界面 我们 ps命令来看一下

有一个 root /usr/share/demo/qttest 这个程序 , 这个程序一启动,咱就在板子上能看到界面

现在这个板子已经是一个小型的计算机系统了
可以跟ubuntu 对比, 虽然梦远pc机的性能强 , 但是它这里面有硬件,操作系统, 应用软件, 你在 ubuntu 敲的命令在这都可以用了, 为什么能在这敲命令?
因为有个shell 会话
ps 查看 有一个进程叫 root -sh 就是shell 会话,

如果启动后 一直输出 mmc 的内容 意思是你的板子上的 mmc 模块不太稳定,

如果有这个问题的话多加一个参数进来

setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 init=/linuxrc console=ttySAC0 maxcpus=1 lcd=wy070ml tp=gslx680 loglevel=1

再 saveenv 一下

嵌入式系统移植课笔记1(学通)相关推荐

  1. 《全面掌握Linux C语言嵌入式系统移植教程》学习笔记(Liunx速查简明)

    全面掌握Linux C语言嵌入式系统移植教程学习笔记(Liunx速查简明) 笔记前言: P3: shell命令简明 P4: vi /vim编辑器入门 P5:vi /vim编辑器扩展 P8: gcc编译 ...

  2. 嵌入式linux系统移植的四大步骤_嵌入式系统移植步骤

    在嵌入式系统移植中重要的一部分是操作系统的移植,与其它操作系统相比,Linux大的特点:它是一款遵循GPL的操作系统,我们可以自由地使用.修改.和扩展它.正是由于这一特色,嵌入式系统移植过程中Linu ...

  3. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  4. 嵌入式系统移植三部曲 李炎朔

    嵌入式系统移植三部曲                             李炎朔 09 机应一班 学号 0906041053 三部曲< bootloader 的移植>< linu ...

  5. 嵌入式系统设计师学习笔记①:数的进制转换

    嵌入式系统设计师学习笔记:数的转换 进位计数制系统的基本概念:数制,基数,数码,数位,位权 制作了个表格如下: 在十六进制中:A-10,B-11,C-12,D-13,E-14,F-15. 举例各种进制 ...

  6. 嵌入式系统设计师考试笔记之嵌入式系统基础知识

    以下是转帖一位网友的嵌考笔记 嵌入式系统设计师考试笔记之嵌入式系统基础知识 欧浩源(ohy3686@qq.com) 20080818 一.引言 自<嵌入式系统设计师考试复习笔记之存储管理篇> ...

  7. 《创客学院嵌入式从入门到精通》笔记--10全面掌握嵌入式系统移植

    目录 01嵌入式基本概念,嵌入式开发环境搭建,目标机搭建,TFTP服务搭建,NFS服务搭建 1.系统移植概述及环境搭建 1.通用嵌入式系统软件组成部分 2.Linux 在嵌入式中应用的条件与前景 3. ...

  8. 《嵌入式系统设计师》笔记之一——嵌入式系统基础知识

    1.1 嵌入式系统的定义和组成 1.1.1 嵌入式系统的定义 以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统. 1.1.2 嵌入式 ...

  9. 时间触发嵌入式系统设计模式 读书笔记

    1 下载地址: https://download.csdn.net/download/longzitailang8/10496129 本书前所未有地提出一整套软件模式,为开发嵌入式软件系统提供帮助.书 ...

  10. 计算机三级嵌入式系统开发 知识点笔记

    目录为搜索词,详情看每一节后图片 思维导图已上传,点击这里下载 嵌入式系统开发 全部章节图片 第一章 嵌入式系统概论 1.1 SoC IP核 1.2 1.2.1 ASCII GB2312 GB1803 ...

最新文章

  1. 概率论中均值、方差、标准差介绍及C++/OpenCV/Eigen的三种实现
  2. android 自定义textview 垂直滚动,Android中TextView如何实现水平和垂直滚动
  3. oracle一行变一列,oracle多行变一行
  4. Mongodb~Linux环境下的部署~服务的部署与自动化
  5. [云炬python3玩转机器学习笔记] 1-1什么是机器学习
  6. SpringMVC之组合注解@GetMapping
  7. JavaScript: 如何将一个字符串转换成对应的函数
  8. springboot 使用 minio
  9. 百度高级副总裁沈抖加入爱奇艺董事会 王路退出
  10. [Ubuntu+opencv]Ubuntu18.04安装opencv3.4.3
  11. 使用SpringSide 3.1.4.3开发Web项目的全过程(中下)
  12. Duilib中Webbrowser事件完善使其支持判断页面加载完毕
  13. 提问的智慧(转自github)
  14. android分享到新浪微博,认证+发送微博
  15. matlab将数据集分成训练集和测试集,Matlab实现 把数据集X分割成训练集和测试集...
  16. 服务器单核性能天梯图,台式机cpu性能排行(cpu单核性能天梯图)
  17. C#之使用RichTextBox 实现简单的txt编辑器
  18. 正睿17+2天集训总结TOT
  19. 算法 树7 二叉搜索树的操作集
  20. 工厂生产管理系统如何解决车间生产管理难题?

热门文章

  1. 循环神经网络--RNN GRU LSTM 对比分析
  2. 婆媳关系处理不好本质上是没有大局观
  3. 批量修改或删除多个 Word、PPT、Excel、PDF 和记事本文件中的多个关键字
  4. PP视频(PPTV聚力)web接口分析
  5. 规格型号、购方名称、地址备注等格式有误、特殊字符-无法开票?
  6. 2021年中国物流仓储系统集成商竞争力排行TOP20
  7. 基于Python PIL库的简易马赛克拼图程序
  8. 2019年北理工计算机北航计算机中山大学计算机北邮网研院保研夏令营
  9. 如何实用gho文件安装操作系统
  10. 山东大学创新项目实训个人工作日志(十四)