如何编译系统
安装交叉编译器首先下载并解压编译器:
复制代码- git clone https://github.com/friendlyarm/prebuilts.git
- tar xvzf prebuilts/gcc/arm-linux-gcc-4.4.3.tar.gz -C /
|
然后将编译器的路径加入到PATH中,用vi编辑vi ~/.bashrc,在末尾加入以下内容:
复制代码- export PATH=/opt/FriendlyARM/toolschain/4.4.3/bin/:$PATH
|
执行一下~/.bashrc脚本让设置立即在当前shell窗口中生效,注意"."后面有个空格:
编译U-Boot
下载U-Boot源代码并编译,注意分支是nanopi:
复制代码- git clone https://github.com/friendlyarm/uboot_nanopi.git
- cd uboot_nanopi
- git checkout nanopi
- make nanopi_config
- make
|
编译成功结束后您将获得u-boot.bin, 如果想马上就测试u-boot,可使用脚本fusing.sh烧写新的u-boot 到SD 卡。
假设您的 SD 卡对应设备名是/dev/sdd,以root运行以下命令:
注意:以上操作会破坏SD卡的数据,请先进行备份。
编译Linux kernel
下载内核源代码并编译
复制代码- git clone https://github.com/friendlyarm/linux-4.x.y.git
- cd linux-4.x.y
- git checkout nanopi-v4.1.y
- make nanopi_defconfig
- touch .scmversion
- make
|
NanoPi内核所属的分支是nanopi-v4.1.y,在开始编译前先切换分支,编译成功结束后,新生成内核烧写文件为 arch/arm/boot/zImage 。
编译制作文件系统
下面的命令将下载文件系统源码包并编译,注意需要在root用户下编译,可用su命令切换:
复制代码- git clone https://github.com/friendlyarm/rootfs_nanopi.git
- cd rootfs_nanopi
- git checkout nanopi
- su
- make && make install && make strip
|
编译成功结束后,将看到以下信息:
复制代码- RootFS (core) successfully installed to:
- /tmp/FriendlyARM/nanopi/rootfs
-
- Copyright 2015 FriendlyARM (http://www.arm9.net/)
|
上面的信息提示我们编译生成的文件系统存放的位置为/tmp/FriendlyARM/nanopi/rootfs,我们把它压缩成一个压缩包:
复制代码- cd /tmp/FriendlyARM/nanopi
- tar czvf rootfs.tgz rootfs/
|
使用自已编译的文件生成制作SD卡
重新制作SD卡系统
先下载SD卡烧写的工具包,并切换到相应master分支:
复制代码- git clone https://github.com/friendlyarm/sd-fuse_nanopi.git
- cd sd-fuse_nanopi
- git checkout master
|
在sd-fuse_nanopi下有个prebuilt,用于存放SD系统运行所需的二进制文件:
- Bootloader: u-boot.bin
内核命令行参数: sdenv.raw
Linux内核:zImage
文件系统压缩包: rootfs.tgz
你只需要将上面章节中编译生成的文件替换它们,就可以测试运行你所编译的系统了,替换文件后,在sd-fuse_nanopi目录下执行以下命令制作SD卡:
(注:/dev/sdx请替换为实际的SD卡设备文件名)
烧写成功完成后,把SD卡放入NanoPi运行试试吧。
更新U-Boot环境变量
制作好的SD启动NanoPi 后,如果通过串口在U-Boot命令模式下修改了环境变量,如bootargs,现在想要把这个修改后的环境用于制作其它新的SD卡,则需要把保存在卡的U-Boot环境变量数据读出来,替换掉prebuilt 下的 sdenv.raw,然后烧写新的SD卡即可。
复制代码- ./readenv.sh /dev/sdd
- cp sdenv.raw prebuilt/
|
关于SD卡RAW文件
由于CPU S3C2451的iROM 是从SD卡的尾部来读取Bootloader,且普通SD卡和SDHC卡的位置不同,而不同品牌或是不同容量的SD卡的大小又是不同的,因此没办法创建适应不同卡的RAW文件。
如果您有一批大小完全一致的SD卡,可使用工具如linux下的dd 读取已经制作好的SD 卡的全部数据,保存为RAW文件,然后将此文件写入其它大小相同的SD卡。
另外,由于现在的SD卡容量通常都比较大,对于8 GB的SD卡,写一个RAW文件将需要较长时间,而目前的rootfs实际只有 ~23 MB,因此直接使用脚本制作SD卡将更快。
[ 此帖被mindee在2015-08-05 13:55重新编辑 ]