记住:此刻,我们的硬盘里面什么都没有
之前我们把Uboot烧到SD卡中了,那么我们要想装Linux系统就必须把
linux内核: 设备树.DTB文件:根文件:root
让这三个文件可以在内存中跑起来。
那么我介绍以下三种方法:
一 :利用TFTP网络从我们的电脑上获取这三个文件。
1)把我们的三个目标文件存放到我们电脑的TFTP的目录下,并给予最高权限:
这个目录是我们之前安装的tftp软件下的文件(不是自己到根下创建一个的,和tftp这个程序有联系的)
每次重新打开ubunt系统都要重启tftp这个软件
sudo service tftpd-hpa restart
2)在网络连接完好的情况下(网线插好,Ip配置好)设置自启动环境变量 BOOTCMDd的命令去自动加载:
setenv bootcmd tftp 0x4100000 uImage;tftp 0x42000000 exynos4412-fs4412,dtb;tftp 0x43000000 ramdisk.img;bootm 0x41000000 0x43000000 0x420000000
saveenv
然后自启动就可以加载这三个文件。
——————————————————
bootm 用法:
自动按照我们填的顺序去执行;
且这三个文件的顺序是固定的;
uImage (linux内核)root.img(根文件系统).dtb(设备树)
如果没有就用(—)表示,不可以不填
二:利用tftp加载到内存,在从内存搬到emmc里面
和上面一再TFTP下准备好三个包
然后
1)TFTP->内存->emmc
tftp 0x41000000 uImage
往emmc里面写Linux内核
mmc write 0 0x41000000 0x800 0x20000
重复这个步骤把exynos4412-fs4412.dtb 和ramdisk.img都放到emmc里面要放不同扇区,还要计算好大小,算了,写一遍把。
tftp 0x41000000 exynos4412-fs4412.dtb
mmc write 0 0x41000000 0x2800 0x800
tftp 0x410000000 ramdisk.img
mmc write 0 0x41000000 0x3000 0x2000
这样我就把文件全部搬到emmc里面去了。
然后这是emmc自启动:
setenv bootcmd 'mmc read 0 0x41000000 0x800 0x200;mmc read 0 0x42000000 0x2800 0x800;mmc read 0 0x430000000 0x3000 0x2000;bootm 0x41000000 0x43000000 0x42000000
saveenv
这就可以了。
这就设置好了,用硬盘去启动Linux.
三:tftp加载内核和设备树 nfs 共享挂载rootfs
nfs:网络文件系统(network file system) 是当前主流异构平台共享文件系统之一。 主要应用在UNIX环境下,现在能够支持在不同类型的系统之间通过网络进行文件共享.
nfs:可以通过实时加载服务器的文件,说是共享,但是你要用的时候还是要加载到板子上的内存。用nfs挂载rootfs的好处就是:我在ubunt上编译好的程序,可以实时用实时改。
步骤:
1}把我们的rootfs放我们加载的nfs下的文件目录下面,并且解压出来。
然后我们在去设置挂载文件的环境变量,就是我们之前设置的那个
它就指定了根文件系统的路径,和挂载方式。
这样我们就可以不用去管这个根文件系统了。
把其它的两个按照之前的方式挂载用tftp或者用tftp再转到emmc里面都可以。
注意的点就是,bootm 的时候 根文件用- 代替而且要用空格隔开。
eg:
bootm 0x41000000 - 0x420000000
——————————————————————
我们总结以下我们的这三种方法:
在研发阶段:我们需要一直改东西,和把写的文件在开发板中运行,所以,我们用第三种方式:tftp加载内核和设备树,nfs挂载根文件系统的方式。
在我们开发完成之后;我们需要把内核和设备树放在EMMC中这样断电断网就不会丢失。所以我们用第二种方式.用tftp加载内核等,再给它放到emmc里面。