当前位置:网站首页>NanopiNEO使用开发过程记录

NanopiNEO使用开发过程记录

2022-07-06 21:42:00 火红色祥云

NanopiNEO学习笔记

体验过程

  • 通过Ubuntu烧写官方提供的.img镜像文件

    首先通过 df -h查看SD的挂载情况

    然后通过 umount /dev/sdx卸载所有SD的挂载项(x更换为对应的1-2-3)

    最后通过指令烧写镜像文件

    sudo if=xxxx.img of=/dev/sdc bs=4M

  • 配置无线网卡

    • 运行 ifconfig -a 如果有wlan0则表示网卡可用

    • 修改文件 sudo vim /etc/wpa_supplicant/wap_suoolicant.conf

      network{
              
          ssid = "QQ"
          PSK="qwertyuiop789"
      }
      
    • 保存退出

    • ifdown wlan0 关闭网卡

    • ifup wlan0开启网卡

  • 通过 ssh [email protected]实现SSH登录

uboot

编译uboot

  1. 首先安装好编译器,准备好编译环境

  • uboot编译的源代码一定要从Ubuntu上通过git下载,不要在Windows上通过git下载,然后通过FTP传到Ubuntu中,这样编译会出错

  • 编译之后通过

    dd if=u-boot-sunxi-with-spl.bin of=/dev/sdc bs=1024 seek=8

    下载到SD卡,然后插上SD卡,通过SD卡启动uboot

  • 修改uboot的变量参数,uboot启动内核,原本是通过 uboot.src这个脚本文件启动的,这个脚本文件的内容可以在Linux启动成功后,在 boot这个文件夹中找到查看内容

  • 修改启动内核的方式

    原本:

    bootcmd=fatload mmc 0:1 ${scriptaddr} boot.scr; source ${scriptaddr}

    通过boot.src脚本启动,启动的参数好像也在脚本文件中

    修改:

    bootcmd=fatload mmc 0:1 42000000 zImage;fatload mmc 0:1 43000000 sun8i-h3-nanopi-neo.dtb;bootz 42000000 - 43000000

    通过bootz启动

  • 修改启动参数

    原本:

    Kernel command line: console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2
    rootfstypxt4 rw rootwait fsck.repair=yes panic=10 fbcon=map:0 data=/dev/mmcblk0p3 snd-soc-core.pmdown_time00000

    修改为:

    bootargs=console=ttyS0,115200 root=/dev/mmcblk1p2 rootwait rw

    修改之后出现了一个 a job is running for dev-mmcblk0p1.device 1min30s的问题,未解决

Linux内核

编译Linux内核

  1. 首先编译下Linux内核,这样启动的时候通过查看编译的日期就知道是不是自己的内核了

  2. 编译之前先安装编译器,配置好编译环境

    • sudo apt-get install u-boot-tools

    • cd linux

    • touch .scmversion

    • make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux-

    • 编译内核

      make zImage ARCH=arm CROSS_COMPILE=arm-linux-

    • 编译设备树

      make dtbs ARCH=arm CROSS_COMPILE=arm-linux-

  3. 编译完成,zImage 和 设备树文件就准备好了

更换原img文件中的内核文件和设备树文件

  1. 更换原img文件中的根文件系统基本一样,只是将/dev/sdc2更换为内核文件和设备树文件存放的区域/dev/sdc1

  2. 更换的文件为arch/arm/boot/zImagearch/arm/boot/dtb/sun8i-h3-nanopi-neo.dtb

根文件系统

更换原img文件中的根文件系统

  1. 准备一个已经编译好的跟文件系统(此处用的已经通过buildroot编译好的跟文件系统)

  2. 插入烧写好原img文件的SD卡

  3. 卸载根文件的分区(此处是/dev/sdc2)

    sudo umount /dev/sdc2

  4. 将/dev/sdc2挂载到临时分区/mnt

    sudo mount /dev/sdc2 /mnt

  5. 将原来的根文件系统全部删除

    • 进入根文件系统中

      cd /mnt

    • 删除所有文件

      sudo rm ./* -rf

      注意:要用sudo,不然有的文件没有权限删除

      别删错路径了,错了自己看着吧。。。。

  6. 将编译的根文件系统放入挂载的临时分区/mnt中

    sudo cp Lib_rootfa.tar /mnt

  7. 将根文件系统解压

    sudo tar xfv Lib_rootfa.tar

  8. 将根文件系统的压缩包删除

    sudo rm Lib_rootfa.tar

  9. 同步下文件

    sync

  10. 卸载根文件系统的临时挂载区

    • 首先命令窗口要退出 /mnt 路径,不然你在使用如何卸载

    • 直接进入系统根目录

      cd

    • 卸载

      sudo umount /dev/sdc2

    • 大功告成,插卡,重启

学习过程总结

更换img中的文件总结

  1. 现在都是通过将SD卡取下来然后通过挂载到临时区来更换不同分区的文件,那么能否通过网络来更新文件呢?大概率是可以的吧,还没掌握,后续继续更新

使用体验总结

  • 将SD卡插入电脑,通过 df -h查看SD卡盘区的分配情况

    /dev/sdc1        40M        12M        29M        30%        /media/lux/boot
    /dev/sdc2        1.2G    1.1G    67M        95%        /media/lux/rootfs
    /dev/sdc3        14G        572M    13G        5%        /media/lux/userdata
    
    • /media/lux/boot中存放的是设备树文件和Linux的zImage镜像文件
    • /media/lux/rootfs中存放的是根文件系统
    • /media/lux/userdata中存放的是超级用户的根文件
  • uboot启动内容的东西放在哪?

    1. zImage镜像和设备树的烧写方式是

      cp arch/arm/boot/zImage /media/lux/boot

      cp arch/arm/boot/dts/sun8i-h3-nanopi-neo.dtb /media/lux/boot

      这些文件存在 /media/lux/boot

    2. 根文件系统的烧写方式是

      make modules_install INSTALL_MOD_PATH=/media/lux/rootfs ARCH=arm CROSS_COMPILE=arm-linux-

    3. uboot的烧写方式是

      dd if=uboot.bin of=/dev/sdc bs=1024 seek=8

      所以uboot是在分区0里面吗?也就是 /dev/sdc0?

  • 创建系统镜像文件.img

    1. 创建一个.img文件

      dd if=/dev/zero of=sys.img bs=1024 conut=300

      .img的文件大小=bs*count

    2. 挂载.img文件

      sudo mount -o loop sys.img /mnt

      • loop挂载到/dev/loopX分区,X的值系统会自动调整

      • 使用 df -h查看会看到挂载一个 /dev/loopX 283M 2.1M 262M 1% /mnt的选项

      • 卸载是要执行 sudo umount /mnt

      • 将要制作的文件放入挂载的目录中 /mnt

        sudo cp /home/lux/files/* /mnt -avrf

      • 修复并调整文件大小

        e2fsck -p -f sys.img

        resize2fs -M sys.img

    3. 格式化.img文件(*,记录,选做)

      sudo mkfs -t ext4 sys.img

      会把sys.img格式化为存放ext4格式的文件

开发过程中使用的命令

  • 查询空闲loop设备

    sudo losetup -f

  • 挂载.img镜像文件

    sudo losetup /dev/loop21 sys.img

  • 查询文件系统格式

    lsblk -f

  • 新建一个500M大小的.img文件.img

    dd if=/dev/zero of=sys.img bs=1M count=500

  • 将镜像文件挂载2到loop设备上

    sudo losetup /dev/loop21 sys.img

  • 创建分区

    sudo fdisk /dev/loop21

  • 将多分区的.img文件与loop关联

    sudo kpartx -av sys.img

  • 查看关联的loop分区

    ls /dev/mapper/

  • 格式化分区

    sudo mkfs.vfat /dev/mapper/loopXp1

    sudo mkfs.ext4 /dev/mapper/loopXp2

    sudo mkfs.ext4 /dev/mapper/loopXp3

    sudo mkfs.ext4 /dev/mapper/loopXp4

  • 挂载分区

    sudo mount /dev/mapper/loopXp1 /mnt

  • 在分区中放入文件

    cd /mnt

    cp xxx /mnt

  • 卸载分区

    sudo umount /dev/mapper/loopXp1

    卸载的指令不要在 /mnt目录下执行

原网站

版权声明
本文为[火红色祥云]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43739167/article/details/125575885