A20_LinuxBSP使用说明书v2.1_20140619

更新时间:2023-04-11 05:37:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-1-A20LinuxBSP 使用说明V 2.120120144-0606--19C O N F I D E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-2-Revision History

Version

Date Changes compared to previous issue V1.0

2013-03-15初建版本V2.0

2013-12-27增加boot2.0去掉boot1.0部分v2.12014-06-19更正源码目录结构,修正固件打包的描述。C O N F I D E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-3-目录

1.概述...........................................................................................................................42.开发环境准备.. (5)

2.1.硬件资源 (5)

2.2.软件资源........................................................................................................53.目录结构介绍.. (6)

3.1.buildroot (6)

3.2.linux-3.4 (7)

3.3.Bootloader (8)

3.4.tools.................................................................................................................84.内部工作机制...........................................................................................................95.编译代码.................................................................................................................106.打包固件.. (11)

6.1.自动打包 (11)

6.2.定制Nand 分区 (12)

6.3.固件烧写......................................................................................................137.定制根文件系统.. (14)

7.1.修改Nand Flash 的rootfs...........................................................................148.集成软件包. (15)

8.1.源代码包 (15)

8.2.二进制包 (17)

8.3.可执行文件..................................................................................................179.附录. (18)

9.1.关于驱动开发 (18)

9.2.在线帮助文档 (18)

10.Declaration.............................................................................................................19C O N F I D E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-4-1.概述

本文档用于介绍全志科技A20芯片的Linux BSP 的组织结构、内部机制以及简单用法。该文档的目的用于指导用户如何定制和使用该BSP 。C O N F I D E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-5-2.开发环境准备

2.1.硬件资源

?

A20IC-Based SOC ;?

运行LINUX 的电脑一台(用于编译和烧写);?串口线,适配的电源和适配的USB 线。

2.2.软件资源

?编译载体建议安装Red Hat Enterprise Linux Server release 6.0(64bit)或者Ubuntu 10.04/12.04(64bit)。要求至少安装gcc,ncurse,bison,autoconf,wget,patch,texinfo,zlib,dos2unix 软件包;

?我们使用的交互编译工具为arm-linux-gnueabi-gcc-4.6.3,内置于BSP 中。C O N F I D E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-6-3.目录结构介绍

BSP 主要由Buildroot,Linux kernel(版本3.4)和Bootloader (basic_boot 和u-boot )组成。其中Buildroot 主要用于制作Linux 根文件系统,Linux Kernel 是BSP 的核心,Bootloader 用于引导Linux Kernel 和量产。

3.1.buildroot

它的主要作用是

?管理包之间的依赖关系;

?安装ARM 交叉工具链;

?制作根文件系统,可以包含strace,directfb,oprofile 等非常丰富的应用软件和测试软件;

?管理BSP 的编译。

I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-7-3.2.linux-3.linux-3.4

4Linux-3.4位于lichee/linux-3.4目录结构如下:

以上目录结构跟标准的Linux 内核是一致的,除了多一个modules 目录。modules 目录是我们扩展用来存放没有跟内核的menuconfig 集成的外部模块

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-8-的地方。目前放了example,nand ,mali 这3个外部模块,其中example 是示例用的,mali 是GPU 驱动,nand 目录用来存放nand 驱动。

3.3.Bootloader

Bootloader 位于lichee/brandy 目录中目录结构如下。

build .sh :编译脚本

u-boot-2011.09:是目前使用的u-boot 的位置

3.4.tools

该目录为打包目录,与打包相关的脚本和工具,以及BSP 的配置和都放在该F I D E

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-9-目录中。

C O N F I

D

E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.

-10-

4.内部工作机制

以sun7i 为例子

lich ee /b u ild.sh -p su

ake

ild.s h

t oolchain

加入到P A TH 环境变量

u x-3.4/script/b u ild _su n 7i.s h

n fig 整root fs ,整理输出文件,复制到相应位置用lin u x 打包工具生成最终件包

图3.1自动化编译流程图

注意:在执行build.sh 脚本时需要指定参数,具体可以参考./build.sh -h 输出

C O

N F

I D

E N T I

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-11-5.编译代码

在lichee 目录下,键入指令

$./build .sh -h

可以得到如下的编译帮助信息:

帮助信息解释:

-h 获取帮助信息

-p 编译平台选择,sun7i --linux 编译,sun7i_android --android 编译-m 指定编译目录,可选kernel ,buildroot ,uboot 。缺省为3个一起编译-i 编译输出到单独的目录

如果是编译linux 固件:

$./build .sh -p sun 7i _linux

编译成功输出:

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-12-

C O N F I

D

E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-13-6.打包固件

打包是指将我们编译出来的bootloader ,内核,和根文件系统一起写到一个镜像文件中,这个镜像文件也叫固件。然后可以将这个镜像写到nand flash 或是sd 卡上,从而启动我们的系统。

6.1.自动打包

编译完成后便可打包(打包android 具体参见android 的相关文档),在Lichee 目录下键入:

$./build .sh pack

L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-14-

假如添加了自己的方案板,最后一个选项中就会出现新方案板的名称。生成的image 文件在lichee/tools/pack_brandy 目录.

例如:lichee/tools/pack_brandy/sun7i_linux_evb-v10.img

C O N F I

D

E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-15-6.2.定制Nand 分区

(1)规划磁盘分区

分区,是指存储设备(通常是nandflash 或者sdcard)上,根据逻辑关系划分的空间。习惯上,分区的编号从0开始,代表第一个分区,1代表第二个分区,以此类推。这项规则类似于PC 上的硬盘分区,如图X 所示。

图6.1分区示意图

图6.1表示,存储设备上一共有A-H 共8个分区,其中,分区A 的起始位置从存储设备的头部开始,是第一个分区,分区H 占用了尾部,是最后一个分区。规划分区,是指在固件包中指明存储设备上的分区个数,并由用户自己定义分区属性。当烧写固件包后,存储设备上就会存在这样由用户定义的分区。用户可以通过这样的规划,修改图6.1的分区,成为如下的情况:

图6.2修改后的分区示意图

通过规划分区可以看出,B 分区的容量减小,C 分区容量增大,同时减少了H 分区。要在存储设备上规划分区,需要按照如下的步骤做(以ref-001方案为例):打开lichee/tools/pack_brandy/chips/sun7i/configs\android(linux)\ref-001目录下的sys_partition.fex 文件;分区配置存放在sys_partition.fex 脚本中,它里面描述了分区信息。分区起始以[partition_start]为标志,后面连续存放每个分区的信息。当遇到非分区信息或者结束,认为分区的配置结束。

O N F I D E I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-16-?

partition :表示这是一个分区,每个分区配置都以它为开始;?

name :分区名称,最大16个字符;?

size :分区大小,以扇区为单位;当为0时,此分区无法操作;?

downloadfile :下载文件名称,可以带相对路径或者绝对路径,可以有后缀或者无后缀;当分区不需要烧录文件时,此项留空或者直接删除此项;?user_type :默认值为0x8000,如果为0xc000打开掉电保护;

分区个数根据配置的patition 项为标准。比如下面配置了4项patition ,那么代表4个分区信息,每个分区信息由parttition 进行标志。

6.3.固件烧写

请参考PhoenixSuit 软件自带的《PhoenixSuit 烧写使用说明文档.pdf 》C O N F

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-17-7.定制根文件系统

7.1.修改Nand Flash 的rootfs 1)复制一份现有的配置文件$cd lichee/buildroot

$cp configs/sun7i_defconfig .config 2)进入buildroot 界面进行配置$make ARCH =arm menuconfig 上述命令后,显示下面的界面图7.1linux 内核make menuconfig 界面配置完后保存,然后到lichee 目录下重新运行build.sh 脚本。编译过程中,如果有软件包缺失,则buildroot 会自动从网上下载,而此时如果编译机器无法连接网络,则需要从网上下载相应版本的软件包,把软件包复制到buildroot/dl 目录下面。C O N F I D E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-18-8.集成软件包

8.1.源代码包

对于用户态的应用程序、动态库和静态库应该集成到buildroot 中,在buildroot/packages 下面每个目录对应一个包。关于如何在buildroot 中集成软件包的说明,请参考3cf89376bb68a98271fefa84/docs 。

举一个简单的例子:

要在buildroot 下添加一个源码包,首先要在buildroot/package 目录下新建一个目录,目录名称为软件包的名称,目录中,再在目录中添加一个config.in 文件和一个xxxx.mk 文件(xxxx 为软件包的名称)。这2个文件的具体写法,参见buildroot/package 目录下的其他的软件包,或者官方网站(软件源码包分为网上的官方软件包和自己编写的源码包,这2类包的config.in 文件形式是一致的,但是.mk 文件的书写会有较大区别,假如是后者,请参见fsck-msdos 包中的.mk ,前者请参见argus 包中的.mk )。做完以上操作以后,还需要在buildroot/package

注意:假设要添加的软件包的名称为panlong 的话。至于段代码添加的位置由具体情况而定,添加位置影响执行make menuconfig 是软件包对应选项的位置。

I D I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-19-

"package/panlong/Config.in"添加到了menu "Package Selection for the target"菜单下,所以在我们执行make menuconfig 后:

图7.2Buildroot make menuconfig 界面

做如图的选择,按下enter 键:

C O

N F I D E

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-20-图7.3package selection for the target 子菜单界面

就可以看到我们添加的软件包了。

注意:以上只是演示,实际添加时尽可能添加到子菜单中,以便于软件包的管理。

对于内核驱动,应该尽量考虑放到linux-3.4/drivers 下面,如果无法直接跟kernel 的menuconfig 集成,则应该放在linux-3.4/modules 下面。

能够和menuconfig 集成的软件包,其添加方法参见kconfig 相关资料。无法与menuconfig 集成的软件包,用modules 下的mali 来进行添加举例:首先,在modules 目录下建立mali 包的子目录,然后为这个包编辑一个总的makefile ,这里可能会用到4个参数:

这些参数的定义都在linux-3.4/scripts/build_XX.sh 中定义(xx 表示你编译时选择的-p 后的参数,如sun7i 等)

N F I D E N T I A L

A20LinuxBSP 使用说明

Copyright ?Allwinner Technology.All Rights Reserved.-21-完成makefile 的编辑后,为了让系统整体编译时让其被编译进去,还需在linux-3.4/scripts/build_XX.sh 文件的build_modules()函数中添加对nand ,wifi ,eurasia_km gpu 软件包的编译规则,以及在clean_modules()函数中添加清除规则。(具体写法可以仿照nand )。

假如添加的项目是默认打开的,那么就需要用编辑好的.config 文件替换掉对应的defconfig 。如sun7i 的,我们就可以把buildroot 下的.config 重命名为sun7i_defconfig ,然后保存到buildroot\configs 文件夹下。

8.2.二进制包

同上,只是忽略掉编译过程。可以参考buildroot/packages/mali-3d 。

8.3.可执行文件

假如需要添加的是一些可执行文件或者是类似ls/cd 等指令,则可以直接添加到lichee\out\linux\common\buildroot\output\target 中(前提是已经完全编译过一次),指令直接添加到bin 、sbin 或者usr 下的bin 、sbin 中,其他可执行文件可以添加在希望指定的任意文件夹下。C O N F I D E N T I A L

本文来源:https://www.bwwdw.com/article/s6rl.html

Top