Linux内核的安装与加载

目录

一、tftp加载Linux内核和roootfs

二、 EMMC加载Linux内核和rootfs

三、tftp加载Linux内核nfs挂在根文件系统

四、EMMC加载uboot


一、tftp加载Linux内核和roootfs

这个就是Linux内核,它很轻量级只有2.949MB所以在嵌入式领域很受欢迎。

上面那个就是设备树文件

 把这两个文件放进来然后chmod 777 ,这个和版本有关老版本16以前只要这个文件夹是777拖进来就变成777了。我这个18.04就不行,需要在赋予权限,但是不需要sudo。有的还要加sudo。

 

然后拖入这个,这是根文件系统。

如果虚拟机重启了需要将tftp服务重启不然是不好使的,我因为以前搞了一段时间大数据所以我习惯挂起,嘎嘎好用。

连接开发板与电脑,在 uboot 交互模式下,设置 uboot 的启动参数

# setenv ipaddr ***.***.***.***

# setenv serverip xxx.xxx.xxx.xxx

# setenv bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;tftp 0x43000000 ramdisk.img\;bootm 0x41000000 0x43000000 0x42000000

# setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs/ rw console=ttySAC2,115200 init=/linuxrc ip=***.***.***.***

 由于内存条只安了一个G所以最好在40000000~80000000

 

 

 所以这一块是16MB每块放一样绰绰有余。

bootm(内核启动命令)

    启动指定内存地址上的Linux内核并为内核传递参数

  bootm kernel-addr ramdisk-addr dtb-addr

  注:

      kernel-addr:  内核的下载地址 

      ramdisk-addr:  根文件系统的下载地址   

      dtb-addr:  设备树的下载地址

      若不使用相应的地址,对应的位置写“-”

  eg:

      bootm 0x41000000 - 0x42000000

 

 

bootargs(u-boot自启动参数环境变量设置)

    eg:

    setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs     

    rw console=ttySAC2,115200 init=/linuxrc ip=***.***.***.***

    注:

  root  根文件系统类型(nfs)

  nfsroot  网络文件系统路径(xxx.xxx.xxx.xxx:/opt/4412/rootfs)

  rw        操作网络文件系统的权限(rw)

  console  控制台(使用串口2,波特率115200)

  init          init进程的位置(/linuxrc)

  ip            linux启动后自身的IP(***.***.***.***)

现在重新启动开发板

额经过我的检查原来是敲错了,尴尬

,希望这次没错。 

 我好像发现了盲点,我用emmc启动的。十分之尴尬啊,现在切换成SD卡重新配置一下

GG致命错误多敲一个0下载到1000 0000了

 

终于成功了,看这亲切的ls

 纯白色看着不舒服

这里可以切换主题,我用Linux这个大黑屏挺好用的

据我观察干咱们这行的基本都喜欢黑色背景,主要熬夜敲代码还是黑色能舒服点,习惯以后白天也想用。 

注意:如果ping不通记得关闭防火墙。

二、 EMMC加载Linux内核和rootfs

emmc是分块的

上面算了一下:

uImage是2.9M

我的计算器太垃圾了算不了小数点。我看下这个uImage是2949K

 

 

 5940块切换成16进制,因为之前我们说过默认是16进制的。

 设备树是36k,乘以1024在除以512,就是72块。所以现在emmc就是这个情况,最前面的800块用来放u-boot。我懒下面这个图复制老师的哈哈。

 emmc有4个G后面可以存一些APP什么的随便玩

然后我们开始敲命令

先用tftp把内核下载到内存,在把内核放到emmc里

 下载设备树然后放到emmc。由于不是直接用内存所以下载到一个地址也没事覆盖了就覆盖了。

最后是根文件系统

---------------------------------------------------------------------------------------------------------------------------------

我刚刚写错地址的时候下载到1000 0000了找了一下exynos4412的地址映射表这块是SFR寄存器,希望没事,不过应该没事,寄存器有的能写有的只读应该是写到只读的寄存器卡住了,那些可写的到时候用之前都要设置,所以应该问题不大那就继续。

---------------------------------------------------------------------------------------------------------------------------------

 

 设置u-boot启动参数,好像太长了

把后面的参数用单引号引起来试试

好像还是不行捏。

我刚刚是在emmc启动下配置的这个长度限制好像破除不了,现在有改成SD卡启动加上单引号就可以了。

这次貌似可以了

现在可以用SD卡不借助tftp启动了。然后我把启动模式换成emmc

看来这个saveenv保存的地方是根据使用的uboot位置定的emmc里的uboot没改良过不接受单引号也许。算了等往后学一学看看能不能解决这个问题。

三、tftp加载Linux内核nfs挂在根文件系统

这种方式适合开发,因为要经常修改系统,所以改一次刷一次emmc太浪费时间了。

解压根文件系统

由于这次跟文件系统是通过nfs挂载的所以就不需要写内存地址了,同样也没有内存地址。所以写个-

重启一下nfs服务

卡在挂在根文件系统了,大概是nfs的问题

 路径有点问题之前的路径是到book这次具体到nfs_rootfs试试。

给文件夹777了这次在试试

还是卡在挂载根文件系统

这次全部文件777

 还是不行

VFS: Cannot open root device 解决思路___pop_的博客-CSDN博客

 感觉这个兄台写的思路很对

查了半天老师出马我敲错一个字母顺便又学了N遍nfs补一下nfs配置文件里这个参数说明

下面这段引自外站侵权我就删了。

---------------------------------------------------------------------------------------------------------------------------------

 https://www.ngui.cc/zz/188328.html?action=onClick

---------------------------------------------------------------------------------------------------------------------------------

 

 

 在虚拟机中写一个这样的程序:

 

 

呕吼不行为什么呢,因为机器码不行啊。

 gcc编译出来的X86的机器码

 我测试了一下很多东西开发板都用不了,因为我们之前配置的东西都在我们的虚拟机中,我们开发板有的只是根文件系统里这些东西。我们之前安过ARM-gcc在虚拟机中编译在开发板中运行试试

 

 好吧file命令开发板就是用不了,但是这个arm架构的hello可执行文件可以。以后就可以在虚拟机写程序和编译开发板执行就行了。

bootargs刚刚就是这个敲错了,这个虽然是uboot的环境变量,但是它是uboot传给内核的参数。

四、EMMC加载uboot

这次就是要彻底脱离SD卡,希望不会敲错。

先把uboot镜像放到tftp文件夹里并给他权限。 

uboot要刷到emmc的引导分区所以我们要运行一个命令打开分区

用SD卡启动默认从第一块开始搬移uboot

用emmc启动默认从第零块开始搬移uboot

 516*1024/512=1032块

一块512字节

转成16进制是408块所以大于408就行

之后我们重新设置一下uboot重启就行

一个root命令

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇努力学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值