NUC970资料之Linux bsp使用

NUC970资料之Linux bsp使用

目录

1 开发环境介绍…………………………………………………………………………………………………………………. 3

2 BSP安装…………………………………………………………………………………………………………………………. 4

2.1 系统需求………………………………………………………………………………………………………………. 4

2.2 BSP相关库……………………………………………………………………………………………………………… 4

2.3 BSP安装步骤………………………………………………………………………………………………………….. 4

3 Linux内核配置…………………………………………………………………………………………………………………. 6

3.1 内核设置界面………………………………………………………………………………………………………… 6

3.2 默认设置………………………………………………………………………………………………………………. 6

3.3 linux内核设置…………………………………………………………………………………………………………. 6

3.3.1 基本系统设置……………………………………………………………………………………………….. 6

3.3.2 网络功能设置……………………………………………………………………………………………….. 7

3.3.3 驱动配置……………………………………………………………………………………………………… 8

3.3.4 文件系统配置………………………………………………………………………………………………. 23

3.3.5 使用FIQ……………………………………………………………………………………………………… 25

3.3.6 Touch Screen与tslib设置………………………………………………………………………………… 27

3.4 Linux内核编译………………………………………………………………………………………………………. 29

4 Linux用户程序……………………………………………………………………………………………………………….. 30

4.1 演示程序…………………………………………………………………………………………………………….. 30

4.2 交叉编译…………………………………………………………………………………………………………….. 33


1 开发环境介绍

开发环境连线

clip_image002

开发板设置

NUC970系列芯片支持多种启动模式: SPI启动、Nand Flash启动、eMMC启动、USB ISP模式。启动模式可以通过PA[1:0]来设置。另外,管脚复用可通过跳线根据系统需求来设置,具体可以参考开发板使用文件来做相应的设置。


2 BSP安装

2.1 系统需求

建立linux开发环境,需要有安装linux环境,可以安装在pc上或安装在虚拟机上。

具体请参考BSP使用手册。

2.2 BSP相关库

Patch 用来打补丁的工具

Libc6-dev 交叉编译所需的动态连接的32位函数库(i386版本)

Libncurses5-dev 设置内核接口所需使用的动态连接库

Minicom 或cutecom 串口工具用来显示以及控制uboot及内核

2.3 BSP安装步骤

Linux BSP包含了三个目录,各目录下的内容如下:

l /BSP:一个压缩包,包含了U-Boot,Linux内核、范例程序的源码、交叉编译工具、以及根文件系统。

l /Documents:BSP相关说明文件

l /Tools:Windows上的烧写工具及驱动程序

将BSP目录中的压缩包复制到Linux开发机器上,使用下面的命令解压缩:

#tar zxvf nuc970bsp.tar.gz

#cd nuc970bsp

在此目录中有安装脚本install.sh。此脚本需要管理者权限才可以执行,可以选择使用“su”命令切换到管理者来执行。

#su

#./install.sh

或是使用sudo来执行安装脚本(若是安装的Linux没有开放root权限,例如Ubuntu,则可以使用本方式来安装BSP)

# sudo ./install.sh

以下是整个安装过程:

clip_image004

若是使用的Linux开发环境之前已经安装过新唐提供的交叉编译工具,安装脚本会询问是否要重新安装交叉编译工具,否则脚本并不会询问使用者,而是直接在/usr/local/arm_linux_4.3目录安装编译工具。在第一种情况下,若要重新安装可输入Y(或者是yes、y、YES),然后按Enter键。

完成交叉编译工具后,安装脚本会询问安装Linux内核、U-Boot、以及范例程序的绝对路径。安装完成后的bsp目录内容如下:

l applications:范例程序及开源程序

l image/kernel:使用默认设置编译好的内核

l image/U-Boot:使用默认设置预先编好的支持NAND或SPI Flash的U-Boot执行文件及环境变量env.txt文件。其中U-Boot的默认执行地址均为0xE00000。

l linux-3.10.x:内核源代码

l rootfs:根文件系统

l uboot:U-Boot源码

安装脚本会尝试为安装的目录设置正确权限,并将交叉编译器的路径增加到系统搜索路径($PATH)中。但在有些Linux版本中,可能发生无法正确设置的问题。此时需要麻烦用户手动设置正确的权限且将/usr/local/arm_linux_4.3/usr/bin加到$PATH中。

请注意,在安装完成后,用户需要先登出再登入,$PATH的设定才会生效。


3 Linux内核配置

3.1 内核设置界面

Linux内核支持各种不同设置,可将不需要的功能移除,只保留需要的功能,减少内核消耗的资源。

要进入内核设置界面,请在linux-3.10.x目录下输入“make menuconfig”的命令,即可进入内核设置界面。

内核设置菜单是多层次的。在当前页面内,可通过上、下、左、右四个方向键选择菜单的位置。上下键选择要控制的内核功能,左右键则是用来选择最下排的功能按钮。按“Enter”键进入下层菜单。最下排按钮共有5个,依次为Select、Exit、Help、Save、Load,具体功能如下:

l Select:当停留在该键时,用空格键选择内核功能。[ ]表示该功能禁止,不编进内核,[*]该功能选中编进内核,[M]表示编译成模块,需手动加载。

l Exit:返回上一菜单,若为最上层菜单则提示是否要保存并退出。

l Help:选择显示帮助

l Save:保存当前设置

l Load:载入已保存设置

在设置完成后,内核设置会保存到linux-3.10.x目录下的.config文件中。

3.2 默认设置

新唐为NUC970系列芯片提供了默认设置,建议用户在更改内核设置前,先加载默认设置,再进行更改。加载默认设置的命令如下:

#make <mcu name>_defconfig

其中:<mcu name>可设为:nuc972,nuc973,nuc976,nuc977

例如:#make nuc972_defconfig //加载NUC972的默认设置。

有时因内核设置错误造成无法开机时,可通过默认设置来恢复到可开机状态。

3.3 linux内核设置

本节根据不同的驱动或功能,介绍所需要使能的内核设置。

3.3.1 基本系统设置

l 使能模块加载功能

有些驱动程序只支持动态加载,例如USB WiFi驱动程序、USB device的驱动等。使能模块加载功能支持,系统启动后可通过insmod命令来加载驱动模块。

clip_image006

l 模块卸载功能

使能模块加载功能支持后,若系统需要支持动态卸载功能,则需要按下图设置模块卸载功能支持。这样就可以使用rmmod来卸载模块了。

clip_image008

l 启动命令设置

用来设置系统启动参数,如根文件系统类型、内存大小、console波特率等。以下只是一个简单的设置,详细说明请参考Documentation/kernel-parameters.txt。

clip_image010

3.3.2 网络功能设置

l TCP/IP设置

使能网络功能设置如下:

clip_image012

l WiFi无线网络设置

若要使用无线网络设备,除了要设置上面的TCP/IP外,还需要设置下面的选项。

clip_image014

clip_image016

3.3.3 驱动配置

l Audio音频接口配置

I2S接口的配置如下:

clip_image018

I2S支持主模式或从模式,用户可根据需要选择两者之一。

选定I2S后,将同时选中NAU8822 codec驱动。另外,配置codec驱动时必须配置I2C接口驱动,系统才能正确加载NAU8822设备。

如果audio应用程序是使用旧的OSS架构编写的,需要配置下面两项,使ALSA兼容OSS架构。可参口音频演示程序alsa_audio。(源代码位于BSP/applications/demos/alsa_audio目录下)

clip_image020

l Cryptographic Accelerator配置

要支持Cryptographic Accelerator,前先配置Networking support里的PF_KEY socket。

clip_image022

然后再打开Cryptographic API里面的相关设定

clip_image024

NUC970 Cryptographic Accelerator硬件支持AES、DES及3-DES crypto加密算法,以及支持SHA及HMAC hash算法,可参考Demo程序crypto。(代码位于BSP/applications/demos/crypto目录下)

l DMA配置

NUC970系列芯片支持DMA功能。要在内核中使能DMA,需进入“DMA Engine support”菜单,配置“NUC970 DMA support”。

如果需要在内核中使用DMA,请参照linux-3.10.x/drivers/dma/dmatest.c中的使用方法,如果需要实际了解dmatest.c的运作流程,可开启“DMA Test Client”。DMA test client将会被自行带起来。

clip_image026

l Ethernet网口配置

NUC970系列支持两个网口,可分别开启或同时开启。要支持网口除了网口驱动外,PHY驱动也需要配置。NUC970开发板上使用的是ICPlus的PHY,若是使用其它的PHY,请配置相应的PHY驱动。

clip_image028

l Etimer配置

NUC970内核执行时,使用基本时钟来计时。另外还提供了四通道的加强型时钟,可输入50%占空比的输出或是支持捕获功能。四个通道可独立控制,以下是相关的配置界面,不使用的可配置成“No output”或“No input”。下图是把通道0和1配置成分别使用PC.6、PC.8输出,通道2和通道3配置成使用PC.11和PC.13作为捕获管脚的例子。

clip_image030

应用程序可使用ioctrl()来控制Etimer的功能,目前支持了toggle out、trigger counting mode及free counting mode等三个功能。在捕获模式下(trigger counting mode及free counting mode),所捕获到的值可由read()读回(单位是us),代表了两次触发条件的间隔。不论是toggle out或是捕获模式单位均为us。可参考BSP中的demo程序(源码位于BSP/applications/demos/etimer)来开发所需要的功能。

l GPIO配置

NUC970系列芯片支持GPIO控制接口,要让内核支持GPIO控制,需配置“NUC970 GPIO support”及“/sys/class/gpio/…”。

clip_image032

GPIO驱动程序将NUC970系列芯片的GPIO口从GPIOA~GPIOJ每组都保留32个号码,所以GPIOA编号0x000~0x01F,GPIOB编号0x020~0x03F,GPIOC编号0x040~0x05F,GPIOD编号0x060~0x07F,GPIOE编号0x080~0x09F,GPIOF编号0x0A0~0x0BF,GPIOG编号0x0C0~0x0DF,GPIOH编号0x0E0~0x0FF,GPIOI编号0x100~0x11F,GPIOJ编号0x120~0x13F。

用户可通过sysfs接口来控制各GPIO。“/sys/class/gpio/…”是通用的GPIO控制接口,可以通过下面的方法来控制GPIO:

l /sys/class/gpio/export:打开某个GPIO

l /sys/class/gpio/unexport:关闭某个GPIO

l /sys/class/gpio/gpio0/direction:控制GPIOA00的方向in或out

l /sys/class/gpio/gpio0/value:控制GPIOA00的输出值1或0

下面是设定GPIOA0输出High的例子:

clip_image034

也可以参考demo程序gpio_demo(源码位于BSP/applications/demos/gpio目录)

在其他的驱动程序中可以通过下列步骤来控制GPIO:

l 在驱动程序中加入#include <linux/gpio.h>

l 依据arch\arm\mach-nuc970\include\mach\gpio.h决定使用哪个GPIO

l 以NUC970_PC7为例,具体控制如下:

设定输入模式:gpio_direction_input(NUC970_PC7)

设定输出模式和输出值:gpio_direction_output(NUC970_PC7,1)

设定输出high:gpio_set_value(NUC970_PC7,1)

设定输出low:gpio_set_value(NUC970_PC7,0)

取值:gpio_get_value(NUC970_PC7)

确认GPIO是否正在使用:gpio_request(NUC970_PC7,”NUC970_PC7”)

获取GPIO中断号码:gpio_to_irq(NUC970_PC7)

使用GPIO中断的例子:

clip_image036

l 配置GPIO模拟I2C接口

除了使用硬件I2C,还可使用GPIO来模拟实现I2C,通过修改arch/arm/mach-nuc970/dev.c中i2c_gpio_adpater_data结构来选择使用的管脚。如设定

.sda_pin=NUC970_PG1,

.scl_pin = NUC970_PG0

即时是使用PG0为SCL,使用PG1为SDA。

clip_image038

clip_image040

l I2C接口配置

I2C接口配置如下:

clip_image042

I2C Port 1有多组管脚供选择,如Port-B、Port-G、Port-H或者Port-I

选择硬件I2C,系统将使用NUC970内建的I2C控制器进行I2C的控制

I2C port0 上挂载了5个设备,分别是OV7725、OV5640、NT99050、NT99141及NAU8822,用户可自行修改、新增设备或将设备修改至port1上,只要修改文件arch/arm/mach-nuc970/dev.c中的nuc970_i2c_clients0结构。

l LCD接口配置

要支持LCD屏,需配置内核下列选项:

clip_image044

在开发板上已接有800×480 的5寸LCD屏,使用18bit的数据线与屏连接,颜色数为RGB888(24-bit)

如果要将Linux的企鹅logo在屏上显示出来,则需配置下列选项:

clip_image046

这样开机时,就可在屏上看到Linux的企鹅logo。

可参考demo程序lcm,了解如可操作frame buffer。(源码位于BSP/applications/demos/lcm目录)

l MTD NAND flash配置

NAND flash的驱动是挂载在MTD子系统之下的,配置如下。NAND flash接口有两组管脚可选:Port C、Port I,需根据硬件连接情况来选择。

clip_image048

驱动中的基本设置如果需要由U-boot环境参数传入就必须将“Command line partition table parsing”选上,否则就使用驱动程序里的默认配置,将MTD分为三个分区。上电进入shell后,分别是/dev/mtdblock0、/dev/mtdblock1及/dev/mtdblock2。第一块是放置U-Boot的空间,第二块放置内核文件,第三块是用来挂载YAFFS2或UBIFS文件系统的空间。若是配置有需要更改,例如增加或减少分区、修改分区大小,请直接编辑uboot/include/nuc970_evb.h或drivers/mtd/nand/nuc970_nand.c

l PWM配置

NUC970 BSP中的内核版本为3.10,但3.10的PWM驱动程序不支持用户程序通过sysfs接口控制PWM,所以目前的PWM子系统是另外由3.11移植回3.10的,方便用户程序控制PWM。

要支持PWM,请配置下面的选项,使用的管脚可根据硬件修改,不使用的通道配置成“No output”即可。

clip_image050

要通过sysfs控制PWM,首先在系统开机后,进入/sys/class/pwm/,可看到四个PWM(pwmchip0~3),每组代表着一个PWM通道。要使用前,需要进入要控制的通道目录执行echo 0 >export,此时会生成一个pwm0目录,这样就可以开始控制这个通道了。在新生成的目录中有几个文件可用来控制PWM,下面列出来这些文件:

l period:控制周期,单位ns。目前驱动支持最小单位是us,以打出20us周期波为例:echo 20000>period

l duty_cycle:设置占空比。单位ns。打出15us

l polarity:设置输出相位。Set Active high:echo 1 > polarity或Set Active low:echo 0 > polarity

l enable:使能禁止控制。使能:echo 1 > enable;禁止:echo 0 > enable。

下面就是一个开启PWM0,并输出周期为30us,占空比为33%的例子:

clip_image052

clip_image054

l Ralink RT3070 802.11 WiFi支持

要支持RT3070 USB WiFi功能的话,除了使能无线网络功能、USB host驱动、模块加载支持外,还要开启下面的设置:

clip_image056

并且在boot command加上以下命令:

clip_image058

RT3070的驱动并没有放在内核源码之中,而是单独放在

BSP/applications/DPO_RT3070_LinuxSTA_V2.3.0.2_20100412/ 目录下。所以编译产生的是内核模块,需要动态加载。

编译时先修改目录下的Makefile,设定正确的内核源码路径,而后输入make命令进行编译。

clip_image060

clip_image062

编译完成后,产生驱动模块rt3070sta.ko。本驱动使用时,除了将本驱动模块放到文件系统中外,还要将RT2870STA.dat复制到根文件系统的etc/Wireless/RT2870STA/ 目录下。

clip_image064

该驱动的使用说明:

1) 加载驱动模块:insmod rt3070sta.ko

2) 启动无线网口:ifconfig ra0 up

3) 使用BSP中的wireless_tool.29版本连接到无线网

使用WEP方式连接的命令:

clip_image066

使用WPAPSK方式连接的命令:

clip_image068

clip_image070

使用WPA2PSK方式连接的命令:

clip_image072

4) 连线成功后,设置固定IP或使用DHCP获取动态IP。DHCP的命令如下:

clip_image074

l RS232、RS485、IrDA串口配置

NUC970系列带有11个串口,可以分别独立配置,请按下面的说明来使能串口功能。每个串口可以单独的开关。除UART0、UART3、UART5外,其他串口都有多组管脚可选择,需要一起设置。其中,UART0这组串口是保留给console使用的,不需要在这里配置。

clip_image076

clip_image078

若是把串口作为红外控制使用,除了需要使能串口功能外,还需要按照下面配置红外模块的驱动选项:

clip_image080

l SD卡配置

NUC970支持两个SD卡接口,目前的驱动只能选择使用其中之一,不能同时使用两个SD。若选择使用SD1,需要配置使用的管脚,可选择Port E、Port H或Port I。

clip_image082

clip_image084

系统启动后,若是检测到有卡插入,会在/dev下出现一个mmcblk0的设备。若卡上有分区,会依分区方式另外出现mmcblk0、mmcblk1等设备。

l SPI接口配置

NUC970系列芯片支持两个SPI接口,可以单独使能或同时使能,下面是同时使能两个SPI接口的配置:

clip_image086

SPI port 0 管脚可选择Normal(4PIN)或Quad(6PIN)模式。

SPI port 1则可选择Port B/Port I(Normal mode)或者Port B/Port I(Quad mode)。

如要使用SPI flash,需要开启MTD功能,配置如下选项:

clip_image088

另外,还要配置JFFS2文件系统后,才能正确使用SPI Flash设备。

JFFS2文件系统的设置方式请参考文件系统配置的章节。

Linux内核需正确识别SPI flash后,才能对其读写。要让内核识别新的SPI flash,请

修改/新增driver/mtd/devices/m25p80.c中的m25p_ids结构。

clip_image090

clip_image092

以及 arch/arm/mach-nuc970/dev.c中的nuc970_spi_flash_data结构。

其中 .type字段需与m25p_ids结构中的其中一个字段相同,否则无法匹配到正确的设备。

clip_image094

如想修改SPI Flash partition数,则可修改 arch/arm/mach-nuc970/dev.c中的nuc970_spi_flash_partitions结构。

clip_image096

l USB Host配置

要支持USB Host,请先勾选打开USB Host支持,NUC970 USB Host包含EHCI(USB 2.0)及OHCI(USB 1.1)两个USB Host控制器,必须同时打开,具体如下面所示:

clip_image098

其中在“NUC970 EHCI(USB 2.0)support”下,根据所使用的芯片型号,选择USB Host port power pin。可选择USB Host port0及port1 分别由PE.14及PE.15控制,或是选择统一由PF.10控制。除了NUC970的USB host驱动需要设置,另外还需要选择所要支持的设备类别,例如Mass Storage,若是要选择Mass Storage,则需先开启SCSI设备支持,才会出现Mass Storage的选项。

clip_image100

l USB Host与HID设备

如想使用USB HID(如USB mouse、keyboard)等设备,除了需要使能USB host外,还需要开启HID及input功能,请参考如下配置:

clip_image102

clip_image104

l 配置USB Device

clip_image106

编译完内核后,会产生三个module文件 fs/configfs/configfs.ko、drivers/usb/gadget/libcomposite.ko、driver/usb/gadget/g_mass_storage.ko,需要将这三个文件复制到rootfs或使系统可以存取到的地方。

USB Mass Storage Gaget的使用方法如下(以mmcblk0p1设备为例):

clip_image108

l VCAP图片获取接口配置

NUC970系列芯片支持Video捕获接口,要在内核中使能此功能,首先必须开启“cameras/video grabbers support”,然后进入“Encoders,decoders, sensors and other helper chips”选项中,开启“NUC970 Video-in support”并且选择摄影机的型号,目前支持OV7725、OV5640、NT99050及NT99141。

clip_image110

Video-Capture接口需要使用I2C接口来控制摄像头,所以在开启Video-Capture接口之前必须设定先开启I2C接口,I2C的部分请参考I2C章节。

目前Video-Capture驱动支持V4l2 API,范例部分请参考范例程序中的cap_demo。(BSP/applications/demos/cap目录)

l Watchdog Timer看门狗设置

要支持看门狗,请参考下面的设置。目前缺省的超时为2.03秒。用户程序可通过ioctl()下的WDIOC_SETTIMEOUT命令更改超时时间。驱动中支持三个不同周期,输入小于2的话,是0.53秒。介于2~8之间的话是2.03秒,而超过8的话是设置成8秒。可参考wdt的演示程序。(BSP/applications/demos/wdt目录)

clip_image112

l Window Watchdog Timer 窗口看门狗配置

要支持窗口看门狗,请参考以下设置。

clip_image114

NUC970窗口看门狗与看门狗主要有两个差异:第一,设置使能之后,无法更改设置,无法停止;第二,只能在特定的时间内让窗口看门狗复位,而不是如同看门狗只要还没有超时,随时可复位。所以应用程序在使用时,一定要先使用ioctl()的WDIOC_GETTIMELEFT命令获取可复位的时间,只有等返回时间为0时才可使用WDIOC_KEEPALIVE命令窗口看门狗复位,否则在不正确的时间下达WDIOC_KEEPALIVE命令,会马上造成系统复位。可参考wwdt演示程序。(BSP/applications/demos/wwdt目录)

l Keypad配置

clip_image116

如果要使用开发板上的keypad,则需选择“Keypad pins are 4×2 matrix PH pin”,可搭配keypad范例程序(BSP/applications/demos/keypad)来使用。

l RTC配置

clip_image118

l ADC电池配置

NUC970系列芯片支持ADC Battery接口,需开启Power supply class support中的“NUC970 ADC battery driver”。如下图:

clip_image120

在shell模式下可以进入“sys/class/power_supply”中找到NUC970 Bettery(ADC)进入后即可查看目前的状态,如下所示:

电池电压:cat voltage_now

电池百分比:cat present

clip_image122

l ADC keypad/touch screen配置

NUC970系列芯片支持ADC keypad/touchscreen接口,必须进入“Input device support”中,然后开启进入“Input NUC970 ADC”,即可看见“Keypad support”和“Touchscreen support”,选择需要的功能开启即可。

clip_image124

当使用keypad时,可以通过修改drivers/input/nuvoton/nuc970adc.c中的nuc970_keycode来修改按键上报值及nuc970_key_th来设定ADC的门限值,假设把ADC得到的电压需要分成八个key则nuc970_keycode[0]设定第一个key上报的key值和nuc970_key_th[0]设定第一个key相对应ADC的电压范围;nuc970_keycode[1]设定第二个key上报的key值和nuc970_key_th[1]设定第二个key相对应ADC的电压范围,依次类推如下:

clip_image126

l SCUART智能卡串口模式配置

NUC970系列带有2个智能卡接口,这两个接口除了智能卡功能外,也可当成基本串口来使用。当系统自带的串口不够用时,可以用来扩充出两个串口。在智能卡串口模式下,SC_CLK作发送,而SC_DAT作接收。这两个接口可以分别使能,请根据下面的说明来使能串口功能,每个串口可以单独的开关,其中SCUART0有两组管脚供选择,使能时需要同时选择管脚。

clip_image128

在智能卡串口模式下,设备文件是 /dev/ttySCU0或/dev/ttySCU1。基本操作与普通串口相同,但限制比普通串口多,如发送及接收各只有四级FIFO,不支持流量控制,也不支持RS485、IrDA等传输模式。当系统串口足够用时,请优先考虑使用普通串口。

l Loop back设备设置

Loop back设备可让系统读写一个文件就像读写block设备一样,这个文件可以是任何系统可以读写的文件系统,然后加载到指定的loop back设备上即可使用。使能设置方式如下:

clip_image130

使用方法如下:

1、生成文件

clip_image132

2、格式化文件(以FAT文件系统为例)

clip_image134

3、加载文件

clip_image136

3.3.4 文件系统配置

l FAT文件系统配置

FAT是SD卡以及U盘上常见的文件格式。FAT文件系统需配置下面选项

clip_image138

以SD卡的第一分区为例,加载文件系统的命令是:

clip_image140

l JFFS2文件系统配置

JFFS2是NAND flash上使用的文件系统之一,要支持jffs2文件系统请配置下面的选项。

clip_image142

clip_image144

l ROMFS文件系统配置

ROMFS文件系统是根文件系统使用的格式之一,请配置下面的选项来支持ROMFS文件系统:

clip_image146

l YAFFS2文件系统配置

YAFFS2是NAND flash上使用的文件系统之一,使用YAFFS2需要先使能MTD的“Caching block device access to MTD devices Device drivers”。YAFFS2的配置如下:

clip_image148

加载YAFFS2文件系统的命令如下:

clip_image150

l exFAT文件系统配置

exFat是微软开发出来的新一代文件系统,exFAT修改了FAT在单个文件大小及设备容量上的限制问题。exFAT的配置如下:

clip_image152

以SD卡的第一分区为例,加载exFAT文件系统的命令如下:

clip_image154

l FUSE文件系统配置及NTFS文件系统支持

FUSE(Filesystem in Userspace), 是指完全在用户层实现的文件系统。用户可以通过FUSE系统实现各种自定的文件系统,较常见的使用FUSE来实现的用户文件系统有NTFS-3G、SSHFS等。下面介绍如何通过FUSE来实现微软的NTFS系统(NTFS-3G)。

可以按照下面的配置来使能FUSE文件系统:

NTFS-3G是一个由Tuxera公司开发并维护的开源项目,目的是为Linux提供NTFS分区的驱动程序,能够安全快速的对Windows NT(包括Windows 2000、Windows XP、Windows Server 2003和Windows Vista)的文件系统进行读写。目前NTFS-3G最新版本是Tuxera公司于2014年2月23日发布的ntfs-3g_ntfsprogs-2014.2.15。

下载地址:http://www.tuxera.com/community/ntfs-3g-download/。

下载完后,根据ntfs-3g上的使用手册进行编译,完成后使用下面的命令即可使用。

clip_image156

l UBIFS文件系统配置

UBIFS是用于固态硬盘设备上的文件系统,与LogFS相互竞争,作为JFFS2的后续文件系统之一,UBIFS在设计效率上比YAFFS2、JFFS2更适合MLC NAND Flash。如:UBIFS支持write-back,它写入的资料会被cache,直到有必要写入时才写到flash,大大地降低分散小区块数量并提高I/O效率。

clip_image158

3.3.5 使用FIQ

一般的中断在某些时候可能会被系统锁住,进而影响此中断的实时性。这是,就可以使用本章节内所提的FIQ,来确保中断的实时性。

l 内核配置

clip_image160

clip_image162

l 使用方法举例

初始化流程如下(以timer2为例):

clip_image164

clip_image166

其中,regs.ARM_r8必须为fiq handler的地址及regs.ARM_r10必须为REG_AIC_IPER的位置。另外需要再对timer2进行必要配置即可使用FIQ。

3.3.6 Touch Screen与tslib设置

当使用touch screen时,可以通过tslib 1.1来校正touch screen。

在applications.tar.gz解压缩后,进入tslib-1.1目录执行下列步骤:

1.编译tslib-1.1

#./configure –prefix=$(pwd)/install –enable-static –enable-shared –host= arm-linux

#make

#make install

2.将$(pwd)/install中所有文件复制到$(rootfs)目录下

3.修改$(rootfs)/etc/profile并增加下列几行。

clip_image168

4.修改$(rootfs)/etc/ts.conf

clip_image170

clip_image172

5. 执行ts_calibrate校准程序,根据屏的指示点击屏幕,对触摸屏进行校准。完成校准后,执行ts_test测试程序,即可去测试触摸屏。如果测试触摸效果不好(无法点选特定的地方或画线有很大的偏差),建议再执行一次校正程序。

clip_image174

clip_image176

6. 执行ts_test,得到如下图显示:

# ts_test

clip_image177

3.4 Linux内核编译

内核设置完成后,在linux-3.10.x目录下执行“make”命令,即可编译内核。若编译通过,则产生内核镜像文件及使用zip压缩的内核镜像文件,它们会被放到源码的上一层的image目录中。

clip_image179


4 Linux用户程序

4.1 演示程序

NUC970 BSP在applications中提供了一些演示程序,下面介绍这些演示程序及其内容。

1.alsa-utils-1.0.23: ALSA命令工具

l 交叉编译命令如下:

$./configure –host=arm-linux –disable-nls –disable-nls –disable-xmlto CPPFLAGS= -I/usr/local/arm_linux_4.3/usr/include/ncurses LDFLAGS= -L/usr/local/arm_linux_4.3/usr/lib

l 播放混音设定

$./amixer set PCM 85%

$./amixer set Headphone 90%

l 录音混音设定

MIC录音设置

$./amixer set “Mic Bias” on

$./amixer set “Input PGA” 100%

$./amixer set ADC 90%

Line In录音

$./amixer set “Right Input Mixer R2” on

$./amixer set “Left Input Mixer L2” on

$./amixer set “L2/R2 Boost” 100%

$./amixer set ADC 90%

l 播放的命令

$./aplay <filename>

如要播放BSP内的音乐示例文件,命令如下:

$cd usr

$./aplay -c 2 -f S16_LE alsa/8k2ch.pcm

l 录音的命令:

$./arecord -d 10 -f S16_LE -c2 -r8000 -t wav -D plughw:0,0 <path/filename>

l 同时录放的命令

$./arecord -f S16_LE -r 8000 -c 2 -D plughw:0,0 | ./aplay

2. Benchmark/netperf-2.6.0 网络性能测试工具

交叉编译命令:$./configure -host=arm-linux

3. Busybox-1.22.1/ busybox源码

交叉编译命令:

$ make menuconfig

Select applets to be build

$ make

4. demos程序

demos/alsa_audio 音乐示例程序

demos/cap 图像获取示例程序

demos/crypto 加密解密示例程序

demos/etimer 增强型定时器示例程序

demos/gpio GPIO示例程序

demos/irda 红外演示程序

demos/lcm/ lcd演示程序

demos/thread 线程演示程序

demos/rtc RTC演示程序

demos/uart uart演示程序

demos/wdt 看门狗演示程序

demos/wwdt 窗口看门狗演示程序

5. DPO_RT3070_LinuxSTA_V2.3.0.2_20100412

RT3070无线dongle开源驱动程序

6. 工具软件

l wireless_tools.29 WiFi设定工具包,包含了iwconfig,iwlist,iwpriv等工具

l Tslib-1.1 touch screen库,含校正及测试程序

l yaffs2utils.tar.gz yaffs2工具 $make

l lzo-2.09.tar.gz 压缩/解压缩工具

交叉编译命令如下:

$cd lizo-2.09

$./configure –host = arm-linux –prefix = $PWD/../install

$make

$make install

l libuuid-1.0.3.tar.gz 产生唯一序号工具

交叉编译命令如下:

$cd libuuid-1.0.3

$./configure –host=arm-linux –prefix=$PWD/../install

$make

$make install

l mtd-utils.tar.gz mtd-utils源码

交叉编译命令如下:

需要使用到lzo-2.09.tar.gz套件和libuuid-1.0.3.tar.gz套件

$cd mtd-utils

$export CROSS=arm-linux-

$export WITHOUT_XATTR=1

$export DESTDR=$PWD/../install

$export LZOCPPFLAGS= -I/home/install/include

$export LZOLDFLAGS= – L/home/install/lib

$make

$make install

7. QT编译

qt-everywhere-opensource-src-4.8.5: QT gui 源码

如果有使用tslib来支持触摸屏,请先修改如下文件

mkspecs/qws/linux-nuc970-g++/qmake.conf

指定QMAKE_INCDIR及QMAKE_LIBDIR,如下:

QMAKE_INCDIR = path to /tslib-1.1/install/include

QMAKE_LIBDIR = path to /tslib-1.1/install/lib

l 设定环境变量

$ export MY_CC_QT4_PREFIX=/usr/local/Trolltech/QtEmbedded-4.8.5

l 配置

$./configure \

-prefix ${MY_CC_QT4_PREFIX} \

-release -opensource -static \

-qconfig dist \

-no-exceptions -no-accessibility -no-stl -no-qt3support \

-no-xmlpatterns -no-multimedia -no-audio-backend -no-phonon \

-no-phonon-backend \

-no-svg -no-webkit -no-javascript-jit -no-script -no-scripttools \

-no-declarative -no-declarative-debug -qt-zlib -qt-freetype \

-no-gif -qt-libpng -no-libmng -no-libtiff -qt-libjpeg \

-no-openssl \

-nomake tools -nomake demos -nomake examples -nomake docs -nomake translations \

-no-nis -no-cups -no-iconv -no-pch -no-dbus \

-embedded arm -platform qws/linux-x86-g++ -xplatform qws/linux-nuc970-g++ \

-no-gtkstyle -no-nas-sound -no-opengl -no-openvg -no-sm -no-xshape \

-no-xvideo -no-xsync -no-xinerama -no-xcursor -no-xfixes \

-no-xrandr -no-xrender -no-mitshm -no-fontconfig \

-no-xinput -no-xkb -no-glib -qt-gfx-linuxfb -qt-mouse-tslib \

-qt-kbd-linuxinput

l 编译QT:

$make

l 编译QT程序

$ cd /path/to/qt-everywhere-opensource-src-4.8.5/examples/dialogs/trivialwizard

$ ../../../bin/qmake

$ make

l 运行QT程序

复制trivialwizard 到系统可以存取到的地方。

设定tslib环境参数

$ export QWS_MOUSE_PROTO=Tslib:/dev/input/event0

执行

$trivialwizard -qws

4.2 交叉编译

有时在一些项目中需要移植软件到ARM平台,许多开源软件都已支持交叉编译,此时只要根据那些软件的说明文档进行交叉编译即可。

但有时遇到那些不支持交叉编译的软件时,就需要手动来更改Makefile。一般来说更改过后的Makefie与原始版本相近,只须做小幅更改就可支持交叉编译。下面列出了需要修改的部分。

l 编译工具的前缀字。如原本的Makefile设定gcc为编译工具,则在新的Makefile需要改成交叉编译工具arm-linux-gcc。其他如as、ld等工具也须更改为arm-linux-as及arm-linux-ld。

l 库文件及头文件所在的路径需作相应修改。交叉编译不使用x86系统下的glibc。而是使用工具链中所提供的占用系统资源比较少的uClibc。

下面列出了一个简单的交叉编译Makefile供参考:

clip_image181

clip_image183