1 开发环境介绍
2 BSP安装2.1 系统需求
2.2 BSP相关库
2.3 BSP安装步骤
3 Linux内核配置3.1 内核设置界面
3.2 默认设置
3.3 LINUX内核设置
3.3.1 基本系统设置
3.3.2 网络功能设置
3.3.3 驱动配置
l Audio音频接口配置
I2S接口的配置如下:
I2S支持主模式或从模式,用户可根据需要选择两者之一。
选定I2S后,将同时选中NAU8822 codec驱动。另外,配置codec驱动时必须配置I2C接口驱动,系统才能正确加载NAU8822设备。
如果audio应用程序是使用旧的OSS架构编写的,需要配置下面两项,使ALSA兼容OSS架构。可参口音频演示程序alsa_audio。(源代码位于BSP/applications/demos/alsa_audio目录下)
l Cryptographic Accelerator配置
要支持Cryptographic Accelerator,前先配置Networking support里的PF_KEY socket。
然后再打开Cryptographic API里面的相关设定
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将会被自行带起来。
l Ethernet网口配置
NUC970系列支持两个网口,可分别开启或同时开启。要支持网口除了网口驱动外,PHY驱动也需要配置。NUC970开发板上使用的是ICPlus的PHY,若是使用其它的PHY,请配置相应的PHY驱动。
l Etimer配置
NUC970内核执行时,使用基本时钟来计时。另外还提供了四通道的加强型时钟,可输入50%占空比的输出或是支持捕获功能。四个通道可独立控制,以下是相关的配置界面,不使用的可配置成“No output”或“No input”。下图是把通道0和1配置成分别使用PC.6、PC.8输出,通道2和通道3配置成使用PC.11和PC.13作为捕获管脚的例子。
应用程序可使用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/…”。
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的例子:
也可以参考demo程序gpio_demo(源码位于BSP/applications/demos/gpio目录)
在其他的驱动程序中可以通过下列步骤来控制GPIO:
l 在驱动程序中加入#include
l 依据archarmmach-nuc970includemachgpio.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中断的例子:
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。
l I2C接口配置
I2C接口配置如下:
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结构。
|
clip_image080_thumb-1.jpg (35.36 KB, 下载次数: 1)
clip_image078_thumb-1.jpg (90.08 KB, 下载次数: 0)
clip_image076_thumb-1.jpg (82.74 KB, 下载次数: 1)
clip_image074_thumb-1.jpg (8.77 KB, 下载次数: 1)
clip_image072_thumb-1.jpg (40.15 KB, 下载次数: 1)
clip_image070_thumb-1.jpg (33.07 KB, 下载次数: 0)
clip_image068_thumb-1.jpg (9.57 KB, 下载次数: 1)
clip_image066_thumb-1.jpg (25.6 KB, 下载次数: 0)
clip_image064_thumb-1.jpg (50.53 KB, 下载次数: 1)
clip_image062_thumb-1.jpg (40.95 KB, 下载次数: 0)
clip_image060_thumb-1.jpg (65.6 KB, 下载次数: 1)
clip_image058_thumb.jpg (8.17 KB, 下载次数: 2)
clip_image056_thumb.jpg (13.58 KB, 下载次数: 2)
clip_image054_thumb.jpg (38.89 KB, 下载次数: 1)
clip_image052_thumb-1.jpg (48.43 KB, 下载次数: 0)
clip_image050_thumb-1.jpg (63.31 KB, 下载次数: 1)
clip_image048_thumb-1.jpg (89.63 KB, 下载次数: 1)
clip_image046_thumb-2.jpg (28.17 KB, 下载次数: 1)
clip_image044_thumb-2.jpg (57.04 KB, 下载次数: 0)
l LCD接口配置
要支持LCD屏,需配置内核下列选项:
在开发板上已接有800×480 的5寸LCD屏,使用18bit的数据线与屏连接,颜色数为RGB888(24-bit)
如果要将Linux的企鹅logo在屏上显示出来,则需配置下列选项:
这样开机时,就可在屏上看到Linux的企鹅logo。
可参考demo程序lcm,了解如可操作frame buffer。(源码位于BSP/applications/demos/lcm目录)
l MTD NAND flash配置
NAND flash的驱动是挂载在MTD子系统之下的,配置如下。NAND flash接口有两组管脚可选:Port C、Port I,需根据硬件连接情况来选择。
驱动中的基本设置如果需要由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”即可。
要通过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%的例子:
l Ralink RT3070 802.11 WiFi支持
要支持RT3070 USB WiFi功能的话,除了使能无线网络功能、USB host驱动、模块加载支持外,还要开启下面的设置:
并且在boot command加上以下命令:
RT3070的驱动并没有放在内核源码之中,而是单独放在
BSP/applications/DPO_RT3070_LinuxSTA_V2.3.0.2_20100412/ 目录下。所以编译产生的是内核模块,需要动态加载。
编译时先修改目录下的Makefile,设定正确的内核源码路径,而后输入make命令进行编译。
编译完成后,产生驱动模块rt3070sta.ko。本驱动使用时,除了将本驱动模块放到文件系统中外,还要将RT2870STA.dat复制到根文件系统的etc/Wireless/RT2870STA/ 目录下。
该驱动的使用说明:
1) 加载驱动模块:insmod rt3070sta.ko
2) 启动无线网口:ifconfig ra0 up
3) 使用BSP中的wireless_tool.29版本连接到无线网
使用WEP方式连接的命令:
使用WPAPSK方式连接的命令:
使用WPA2PSK方式连接的命令:
4) 连线成功后,设置固定IP或使用DHCP获取动态IP。DHCP的命令如下:
|
||
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并增加下列几行。 4.修改$(rootfs)/etc/ts.conf 5. 执行ts_calibrate校准程序,根据屏的指示点击屏幕,对触摸屏进行校准。完成校准后,执行ts_test测试程序,即可去测试触摸屏。如果测试触摸效果不好(无法点选特定的地方或画线有很大的偏差),建议再执行一次校正程序。 6. 执行ts_test,得到如下图显示: # ts_test 3.4 LINUX内核编译内核设置完成后,在linux-3.10.x目录下执行“make”命令,即可编译内核。若编译通过,则产生内核镜像文件及使用zip压缩的内核镜像文件,它们会被放到源码的上一层的image目录中。 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 如要播放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 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 交叉编译
原文来自:https://bbs.21ic.com/icview-2408450-1-1.html