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

[复制链接]

实习生

发表于 2017-9-4 21:57:46   425 查看 9 回复 显示全部楼层 倒序浏览
分享
本帖最后由 moreStrong 于 2017-9-6 08:37 编辑

虚拟机: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,感兴趣可以试试。会解析这个文件,看输出的结构是否有新增的东西,正确回车就可以了。
4、重启
/etc/init.d/samb 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-Plus2\toolchain有三个文件为交叉编译链工具,编译内核和编译应用程序是两个不同的编译链工具,如下图所示:
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-Plus2\sources目录,该目录试厂家提供的源码,找到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:/sbin/reboot
::shutdown:/bin/umount -a -r

etc/init.d/rcS:
#!/bin/sh
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/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教程有点区别,希望能够加精!





技术员

发表于 2017-9-5 20:58:11  
收藏了,学习一下
回复

点赞 举报

发表于 2017-9-9 20:48:35  

PCB在线计价下单

板子大小:

cm
X
cm

层数:

2

板子数量:

10

厚度:

1.6
很不错啊
回复

举报

技术员

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

点赞 举报

实习生

发表于 7 天前    楼主|
marktoo123 发表于 2017-9-13 15:00
楼主,我问下移植到开发板后,wifi功能有吗?我移植后没找到wlan0。

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

点赞 举报

实习生

发表于 7 天前    楼主|
moreStrong 发表于 2017-9-14 09:03
内核驱动应该是支持了的,ubuntu里面应该有个工具用来管理wifi的,增加应用程序应该可以的,nanopi有个wifi管理工具,叫什么忘了

如果内核没有,在编译内核的时候,make menuconfig看一个有么有相关的选项
回复

点赞 举报

实习生

发表于 7 天前    楼主|
回复

点赞 举报

实习生

发表于 7 天前    楼主|
琦 发表于 2017-9-5 20:58
收藏了,学习一下

谢谢
回复

点赞 举报

实习生

发表于 7 天前    楼主|
marktoo123 发表于 2017-9-13 15:00
楼主,我问下移植到开发板后,wifi功能有吗?我移植后没找到wlan0。

我没有做wifi的实现,可以相互研究一下
回复

点赞 举报

实习生

发表于 前天 20:30  
大佬蛮厉害呀 带带我
回复

点赞 举报

高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

我的提问

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

DFRobot专区

树莓派论坛

智能硬件论坛

开发快智能硬件开发平台

Intel物联网开发者专区

Waveshare

乐美客SBC专区

Arduino论坛

BeagleBone论坛

机器人论坛

创客神器NanoPi

小钢炮CANNON

比派科技banana pi专区

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

个人版区

阿东Verilog技术专版

直流马达驱动电路设计

LabVIEW英雄联盟

特权同学FPGA专区

-

厂商专区

灵动微电子 MM32

盈鹏飞嵌入式

TI论坛

TI Deyisupport社区

芯灵思嵌入式论坛

Tisan

米尔科技

庆科社区

WIZnet技术专区

Cypress技术论坛

飞凌嵌入式

Qualcomm技术论坛

英创嵌入式

机智云GoKit论坛

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区