创客神器NanoPi
直播中

moreStrong

9年用户 50经验值
擅长:嵌入式技术
私信 关注
[经验]

【NanoPi NEO Plus2开发板试用体验】编译uboot和linux制作最小根文件系统制作刷机包---详细教程

本帖最后由 moreStrong 于 2017-10-13 21:23 编辑

虚拟机:VMware Workstation 12
系统环境: ubuntu-16.04.3-desktop-amd64.iso
编译工具链:gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar.xz                        
开发板:NanopiNEO-Plus2其他:内存卡、读卡器、USB转TTL、MicUSB线
软件包地址:下载地址


        安装ubuntu经验
        Linux命令基础
        安装samba服务
        安装shh服务
        安装交叉编译链工具
        编译uboot
        编译 linux内核
        制作最小根文件系统
        分析刷机包
        制作刷机包
-------------------------------------------不会设置文中超链接,尴尬了!

一、安装Ubuntu经验
注意:根据厂家提供的交叉编译链工具是64位的,所以必须安装64位的虚拟机!
1、在新建虚拟机的时候,不要选择安装程序光盘镜像文件,选择稍后安装操作系统,如果在这里设置了安装程序光盘,虚拟机会自动给你进行安装,如果你想自己分区那就没法了,最头痛的是这样安装后居然没法调分辨率,而且遇到过安装的时候没法点击确认按钮,不知道现在新版本改进没有,我已经养成了这个习惯,这里不进行设置。 1.JPG.png
虚拟机创建完成后,编辑虚拟机设置,在这里进行镜像文件设置。

2.png
2、如果想虚拟机上网的话,这里设置成桥接模式,这样就可以直接连接路由器了。

3.png
二、Linux命令基础
1、查找文件
      查找a.c的文件 find -name "a.c"
      在当前目录搜索a字样的文件 grep "a" *-nR
2、解压
    解压tar.gz文件   tar zxvf xxxxx.tar.gz
    解压tar.xz文件 先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。
    解压tar.bz2文件  tar xvf  xxx.tar.bz2
3、修改环境变量
    a) 永久有效
         vi /etc/environment或 export PATH=xxxx:$PATH
         source /etc/environment
    b) 设置临时环境变量
        export  PATH=/work/tool/gcc-linaro-4.9-2015.02-3-x86_64_aarch64-linux-gnu/bin:$PATH
        export  GCC_COLORS=auto
         .  ~/.bashrc
4、分区命令 fdisk
   fdisk命令参数介绍
   p、打印分区表。
   n、新建一个新分区。
   d、删除一个分区。
   q、退出不保存。
   w、把分区写进分区表,保存并退出。
5、挂载、卸载
    挂载mount /dev/sda1 /mnt 卸载mount /mnt
三、安装samba服务
1、创建共享目录
    mkdir /work
    chomd –R 777 /work
2、安装
    apt-get install samba
    apt-get install smbclient
3、修改配置
    备份配置文件cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
    vi /etc/samba/smb.conf
在最后增加:
[work]
        Path = /work                 #共享目录
        valid users = Ubuntu    #添加的用户名
        browseable = yes
        public = yes
        writable = yes
退出保存,还可以验证是否正确testpARM/etc/samba/smb.conf,感兴趣可以试试。会解析这个文件,看输出的结构是否有新增的东西,正确回车就可以了。增加账户
    sudo smbpasswd -a ubuntu
   根据提示输入密码即可
4、重启
/etc/init.d/samba restart
5、测试
Ifconfig查看IP地址,在windows中输入://+IP地址

四、安装SSH服务
1、安装SSH
sudo apt-get update
sudo apt-get install openssh-server
2、查看是否已经启动
sudo ps -e |grep ssh
如果如下图所示就说明启动了,如果没有则输入:sudo service ssh start
4.png
3、查看系统ip,通过xshell就可以远程登录了。

五、安装交叉编译工具
厂家提供的文件中,在NanoPi-NEO-Plus2toolchain有三个文件为交叉编译链工具,编译内核和编译应用程序是两个不同的编译链工具,如下图所示:
5.png
    图中1:既可以编译内核和uboot也能编译应用程序、根文件系统
    图中2:编译内核和uboot,不能用于编译应用程序,编译后无法运行
    图中3:ubuntu下无法运行,不知道是干嘛的,放在板子上也没法运行,知道的大神讲解一下!

1、 上传文件通过Samba将文件上传至ubuntu,这里我们使用第二个文件就可以了2、 解压(没有xz解压工具需要自行安装sudo apt-get install xz)
    xz -d gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar.xz
    tar xvf gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar
    解压后得到gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu文件夹
    cd  gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin

3、增加环境变量
    export PATH=/work/tool/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin:$PATH
    source /etc/environment
4、检验
在更目录下输入aarch64-linux-gnu-gcc -v查看是否能够正常运行,正常运行如下图所示。
6.png

六、编译uboot
1、上传文件
进入NanoPi-NEO-Plus2sources目录,该目录试厂家提供的源码,找到uboot并通过samba拷贝带ubuntu下,顺带把linux源码也拷贝过去,下面就不在进行讲解拷贝了!
u-boot_2017.05_20170630.tar.gz
linux_4.11.2_20170630.tar.gz
2、解压上述文件
解压方法请看第二节、linux基础命令
3、编译
cd u-boot
make nanopi_neo2_defconfig CROSS_COMPILE=aarch64-linux-gnu-
make CROSS_COMPILE=aarch64-linux-gnu-

七、编译linux
cd linux/
touch .scmversion
make sunxi_arm64_defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
make Image dtbs ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-


八、制作最小根文件系统
1、下载busybox
访问下载最新版本busybox-1.27.2

2、编译安装busybox
tar xjf busybox-1.26.2.tar.bz2
cd busybox-1.26.2/
make menuconfig //
设置交叉编译工具链 并选择支持 mount NFS

这里可能会出现编译错误
@ubuntu:/home/dev/busybox-1.19.3# make menuconfig
HOSTCC  scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:0:
scripts/kconfig/lxdialog/dialog.h:31:20: fatal error: curses.h: 没有那个文件或目录
compilation terminated.
make[2]: *** [scripts/kconfig/lxdialog/checklist.o] 错误 1
make[1]: *** [menuconfig] 错误 2
make: *** [menuconfig] 错误 2
这是因为缺少一个套件 ncurses devel ,把此套件安装下即可
apt-get install libncurses5-dev
如make menuconfig执行成功,如图所示,进行交叉编译链设置        Busybox Settings  --->   () Cross Compiler prefix     -->输入:aarch64-linux-gnu-  
7.png
8.png
9.png
在勾选nfs选项       Linux System Utilities  --->          [ ] Support mounting NFS file systems on Linux < 2.6.23       -->输入y
10.png
make
make install

最后会生成一个_install文件夹
11.png

3、创建一个目录用于存放文件系统
cd /work/sources/
mkdir mini_nanopiNEO_plus2
4、将_install文件夹中的所以文件拷贝到/work/sources/mini_nanopiNEO_plus2中
cd _install/

cp * -d  /work/sources/mini_nanopiNEO_plus2   -rf


5、复制lib库到根文件系统中
创建lib目录
mkdir /work/sources/mini_nanopiNEO_plus2/lib
找到交叉编译链的动态库,如下图所示,我的地址是/work/tool/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib
12.png
拷贝所有so动态库文件
cd /work/tool/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib
cp *so* -d  /work/sources/mini_nanopiNEO_plus2/lib

6、构建etc目录
只需要创建 3 个文件: etc/inittab、 etc/init.d/rcS、 etc/fstab。
内容如下。
etc/inittab:
# /etc/inittab
::sysinit:/etc/init.d/rcS
ttyS0::askfirst:-/bin/sh
::ctrlaltdel:/***in/reboot
::shutdown:/bin/umount -a -r

etc/init.d/rcS:
#!/bin/sh
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /***in/mdev > /proc/sys/kernel/hotplug
mdev -s

还要改变它的属性,使它能够执行:
$ chmod +x etc/init.d/rcS

etc/fstab:
#device mount-point type options dump fsck order
proc /proc proc  defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0

7、构建dev目录
$ cd /work/sources/mini_nanopiNEO_plus2
$ mkdir dev
$ cd dev
$ sudo mknod console c 5 1
$ sudo mknod null c 1 3

8、其他空目录
比如 proc、 mnt、 tmp、 sys 等,如下创建:
$ cd  /work/sources/mini_nanopiNEO_plus2
$ mkdir proc mnt tmp sys var
九、分析刷机包

十、制作刷机包
1、制作映像文件
1、制作一个256M空白的镜像文件,你可以制作的更大或者更小,具体看编译后的uboot和内核大小以及根文件系统大小dd if=/dev/zero of=fs_nanoPI_256M.img bs=1M count=256
2、设置为回环设置
sudo losetup /dev/loop0 fs_nanoPI_256M.img
3、划出 2 个分区,注意第 1 个分区起始地址要大于(16400K+1000K),我们取它的偏移地址
为 20M, 大小为 32M; 第 2 个分区只要大过 fs_mini_nanoPI 即可,我们取为 128M。
$ sudo fdisk /dev/loop0
分区信息如下:
Device Boot Start End Blocks Id System
/dev/loop0p1 40960 106495 32768 83 Linux
/dev/loop0p2 106496 368639 131072 83 Linux
说明:分区操作请看,这里不再累述。
识别分区, 并格式化:
$ sudo partprobe /dev/loop0
$ sudo mkfs.vfat -I /dev/loop0p1
$ sudo mkfs.ext4 /dev/loop0p2


2、烧写BootLoader
cd  uboot  #进入你存放uboot的目录
sudo dd if=spl/sunxi-spl.bin of=/dev/loop0 bs=1k seek=8
sudo dd if=u-boot.itb of=/dev/loop0 bs=1k seek=40

3、烧写内核
cd linux/
sudo mount -t vfat /dev/loop0p1  /mnt  #挂在分区1
cp arch/arm64/boot/Image  /mnt
cp arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi*.dtb  /mnt
sudo umount /mnt

4、烧写文件系统
cd mini_nanopiNEO_plus2
sudo mount /dev/loop0p2 /mnt
sudo cp * -rfd /mnt
sudo umount /mnt
5、卸载回环设备
sudo losetup -d /dev/loop0

至此得到的 fs_nanoPI_256M.img, 可以使用工具 win32diskimager 把它烧到 SD卡中,此 SD 卡即可用来启动 NanoPi NEO Plus2。




附一张启动最小文件系统的照片,小编一次成功的哦!

13.png

--不得不吐槽这个网页编辑器,浪费我不少时间,加班完成的帖子,对目前nanopiNEO_plus2还没有一个关于构建根文件系统和制作刷机包的教程,特别是制作刷机包有些关键地方和其他关于nanopiNEO教程有点区别,希望能够加精!






回帖(9)

Asurada

2017-9-5 20:58:11
收藏了,学习一下
举报

゛向日葵的执着

2017-9-9 20:48:35
很不错啊
举报

marktoo123

2017-9-13 15:00:58
楼主,我问下移植到开发板后,wifi功能有吗?我移植后没找到wlan0。
举报

moreStrong

2017-9-14 09:03:32
引用: marktoo123 发表于 2017-9-13 15:00
楼主,我问下移植到开发板后,wifi功能有吗?我移植后没找到wlan0。

内核驱动应该是支持了的,ubuntu里面应该有个工具用来管理wifi的,增加应用程序应该可以的,nanopi有个wifi管理工具,叫什么忘了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分