本帖最后由 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、在新建虚拟机的时候,不要选择安装程序光盘镜像文件,选择稍后安装操作系统,如果在这里设置了安装程序光盘,虚拟机会自动给你进行安装,如果你想自己分区那就没法了,最头痛的是这样安装后居然没法调分辨率,而且遇到过安装的时候没法点击确认按钮,不知道现在新版本改进没有,我已经养成了这个习惯,这里不进行设置。
虚拟机创建完成后,编辑虚拟机设置,在这里进行镜像文件设置。
2、如果想虚拟机上网的话,这里设置成桥接模式,这样就可以直接连接路由器了。
二、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
退出保存,还可以验证是否正确testp
ARM/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
3、查看系统ip,通过xshell就可以远程登录了。
五、安装交叉编译工具
厂家提供的文件中,在NanoPi-NEO-Plus2toolchain有三个文件为交叉编译链工具,编译内核和编译应用程序是两个不同的编译链工具,如下图所示:
图中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查看是否能够正常运行,正常运行如下图所示。
六、编译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-
在勾选nfs选项 Linux System Utilities ---> [ ] Support mounting NFS file systems on Linux < 2.6.23 -->输入y
make
make install
最后会生成一个_install文件夹
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
拷贝所有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。
附一张启动最小文件系统的照片,小编一次成功的哦!
--不得不吐槽这个网页编辑器,浪费我不少时间,加班完成的帖子,对目前nanopiNEO_plus2还没有一个关于构建根文件系统和制作刷机包的教程,特别是制作刷机包有些关键地方和其他关于nanopiNEO教程有点区别,希望能够加精!