1.Linux内核从远程nfs启动(踩坑记录)

前言

本次实验的启动方式是:通过网络挂载rootfs,内核从sd卡加载,并没有通过网络下载
关于uboot的两点配置bootargs,bootcmd
bootargs:传递给内核使用的参数,对uboot来说只是一个环境变量
bootcmd:uboot启动命令,主要是加载内核,设备树,rootfs,然后用bootm启动内核

1.先将随便烧写个官方镜像到sd卡(也不能太随便,只要你要编译的内核要接近镜像的,否则后面替换内核可能导致uboot和内核版本不匹配,从而无法启动),由于我只需要使用内核所以只需要烧录到第一个分区截至,嗯,我这里用了一张128M的古董及sd卡,物尽其用了。先看一下镜像分区表
在这里插入图片描述
可以看到我这个镜像内核分区截至到地133119扇区(1扇区=512字节),拷贝到sd卡:

sudo dd if=s5p4418-kitkat-sd8g-20171017.img of=/dev/sdd bs=512 count=133119 conv=fsync

2.再回到uboot的参数配置,看一下bootcmd参数。

bloader=ext4load mmc 0:1
bootcmd=$bloader 0x48000000 $kernel;$bloader 0x49000000 root.img.gz;bootm 0x48000000

可以看到bootcmd使用ext4load mmc 0:1(=bloader) 加载了内核和根文件系统。由于内核都是从sd加载的,所以bootcmd我们不用改,至于bootcmd也加载了rootfs,这个不影响后续的启动。

3.配置bootargs,bootargs的配置只需要保留console,添加ip地址设置,nfsroot,init进程地址

bootargs=console=ttyAMA0,115200n8 nfsroot=192.168.0.109:/home/minicoco/disk1/Dev/nanopi/rootfs 
ip=192.168.0.99:192.168.0.109:192.168.0.1:255.255.255.0::eth0::off root=/dev/nfs rw init=/sbin/init
配置内核支持NFS启动
make menuconfig
  • Networking support

    • –>Networking options
    • –>TCP/IP networking
    • –>IP:kernel level autoconfiguration
  • File systems

    • –>Network File System
    • –>NFS client support
    • –>Root file system on NFS

重点检查ramdisk是否开启,这个开启了很有可能挂不上NFS

  • General setup
    • –>Initial RAM filesystem and RAM disk(initramfs/initrd) support//去掉

重新编译内核

make -j16 				 #得到zImage
make uImage LOADADDR=0x48000000 #从uboot可以看出loadaddr地址为0x48000000

获取uImage,插上sd卡替换

搭建NFS服务器

1.安装nfs服务

sudo apt install nfs-kernel-server

2.配置nfs

sudo nano /etc/exports
------------------------------
在/etc/exports结尾添加,no_root_squash参数很重要,不能少
/home/rootfs 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)

3.测试nfs服务器
可以吧镜像中自带的root.img.gz拷贝出来解压,先当做rootfs测试下
最后我测试失败了,卡在了网络驱动加载的地方,初步怀疑是nfs没有挂载成功
在这里插入图片描述
经过网上各种搜索分析,最后发现这里有个非常大的坑,nfs服务器不能用最新的1.1.3的版本,需要降级。我是用的是Lubuntu,什么版本已经不记得了,看了下服务器仓库中的版本,只有1.1.3。尝试下载deb包自己装,一堆依赖无法解决,最后被迫换到ubuntu16系统。血淋淋的教训,以后还是用老一点版本的系统比较好。
在这里插入图片描述
最后这个样子就算挂载成功了

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核中,有多种常用的内存管理算法,用于有效地管理系统内存资源。以下是一些常见的内存管理算法: 1. 分页(Paging):分页是一种将物理内存划分成固定大小的页面,将进程的虚拟地址空间映射到物理内存的算法。通过分页,操作系统可以将进程的虚拟地址空间分割成多个页面,并将这些页面映射到物理内存上。 2. 页表(Page Table):页表是一种数据结构,用于记录虚拟地址和物理地址之间的映射关系。当进程访问虚拟地址时,操作系统会通过页表查找对应的物理地址。 3. 页面置换(Page Replacement):页面置换算法用于在物理内存不足时选择合适的页面进行置换。常见的页面置换算法包括最佳置换算法(OPT)、先进先出算法(FIFO)、最近最久未使用算法(LRU)等。 4. 内存回收(Memory Reclamation):内存回收算法用于释放不再使用的内存页面,以便重新分配给其他进程使用。常见的内存回收算法包括垃圾回收和页面回收。 5. 内存碎片整理(Memory Fragmentation):内存碎片整理算法用于解决内存碎片问题,将多个小内存块整理成连续的大内存块,以提高内存利用率。 6. 交换(Swapping):交换是一种将进程的部分或全部数据从内存移到磁盘上的操作。当系统内存不足时,操作系统可以将一部分进程数据交换到磁盘上,以释放物理内存。 这些算法在Linux内核中被广泛应用于内存管理,以提供高效的内存分配和管理机制。具体选择哪种算法取决于系统的需求和性能要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值