nuc980开发linux bsp使用手册简体中文_第1页
nuc980开发linux bsp使用手册简体中文_第2页
nuc980开发linux bsp使用手册简体中文_第3页
nuc980开发linux bsp使用手册简体中文_第4页
nuc980开发linux bsp使用手册简体中文_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NUC980LinuxBSP使用手TheinformationdescribedinthisistheexclusiveinlectualpropertyofNuvotonTechnologyCorporationandshallnotbereproducedwithoutpermissionfromNuvoton.Nuvotonisproviding onlyforreferencepurposesofNUC980microprocessorbasedsystemNuvotonassumesnoresponsibilityforerrorsorAlldataandspecificationsaresubjecttochangewithoutForadditionalinformationorquestions,pleasecontact:NuvotonTechnology内NUC980LinuxBSP简 开发板设 BSP安 CentOSLinux及安 BSP安装步 透过GitLinux内 Linux用户程 版本历 NUC980LinuxBSP简这包BSP支持了NUC980系列.新唐科技的NUC980系列是以ARM926EJS为核心的系统级单.包含了16kBI-Cache,16kBD-Cache,16kBSRAM,16.5kBIBR以及MMU内存管理模块.可以由USB,NAND,SD/eMMC,及SPIFlash开机.NUC980系列有丰富的高速周边,提供两组10/100Mbps网口,一个USB2.0高速host/device及一个USB2.0高速host控制器,最多六组USB1.1hostlite接口,两个CMOS传感器界面支持CCIR601及CCIR656,两个SD接口支持SD/SDHC/SDIO卡,一个NANDFlash接口支持SLC及MLC,一个I2S接口支持I2S及PCM协议.NUC980系列同时内建了硬件加模块,支持RSA,ECC,AES,SHA,HMAC及随机数(RNG).NUC980系列提供最多高达十组UART接口,两组ISO-7816-3接口,一组Quad-SPI接口,两组SPI接口,最多四组I2C接口,四组CAN2.0B接口,八个输出,8个12-bitSARADC通道,六组32-bit定时器,WDT(看门狗),WWDT(窗口看门狗),32.768kHz外接晶振及RTC.TheNUC980系列另外提供了两个组带10个信道的PDMA来增加数据传输率.LinuxBSP包含了以下内容Linux4.4内核源码NUC980GCC4.8.4交叉编译程序,演示个接口功能的范例程序源码U-Boot2016.11源码NUC980WindowsNu-Writer开发环境联在Linux环境下,基本的系统讯息以及s环境的沟通都是透过串口来达成.不论是U-Boot或是Linux均使用UART0来做为讯息沟通的接口.在U-Boot环境下,也支持了网口TFTP的传输.另外新唐也提供了基于Windows平台的USB接口烧写工具.以下是开发环境联机的示意图.若是使用虚拟机,则只需要一台PC即可WindowsWindowsNUC980DEVLinux开发板设NUC980系列支持不同的开机模式,可从SPI,NAND,eMMC/SD开机,或是进入USBISP模式.这些设置是透过PG[1:0]的jumper控制另外,因为复用脚位的关系,开发版上会有些jumper须依不同系统需求来设置.请参考开发版的文件来做系统相应的设置.系统需NUC980LinuxBSP提供了基于Linux操作系统的交叉编译环境.新唐有在不同的x86Linux环境测试了本BSP,包含了Ubuntu,CentOS,Debian…等.因Linux版众多,系统设置会有些许差异,有时使用这需更改系统设置,使开发环境顺利执行.Linux开发环境可选择架设原生环境,或是选择架设于Windows操作系统中的虚拟机上.本章节介绍了VMware虚拟机安装,CentOSLinux开发环境安装,以及BSP的安装步骤VMware虚拟机及安VMware提供了免费的虚拟机VMwareyer5.0.2供使用者.从VMware官网 /.的页面进入“Products”→“Products”→“yer”,然后按下“Download”键,选择“5.0(latest)”作为“MajorVersion”以及“5.0.2(latest)”作为“MinorVersion”之后“VMwareyerforWindows32-bitand64-bit”.请参考以下的完成后,请先双击的VMware然后按下“Next”继续完成安装步骤最后,双击安装完成的来建立虚拟机CentOSLinux及安在此介绍了在VMware下的CentOS6.4安装步骤.若是要安装原生PC机,步骤也类似.CentOS6.4请先联机至以下 :.的网页由“CentOS6Releases”→“i386”进入.选择“CentOS-6.4-i386-bin-DVD1.iso”.VMware已安装完成“CreateaNewVirtualMachineLinux虚拟机或返回上一章节继续完成VMware安装.首先,点选“Installerdiscimagefile(iso):”and“Browse…”并指定的CentOS6.4无安装来源“Fullname:”“Username:”“Password:”and“Confirm:Confirm键.请记得在此设置的用户名称及,它们将用来登入安装的CentOS操作系统.接下来,“Virtualmachinename:以及“Location:”,否则保留默认值即下一步则是输入“umdisksize(GB):”值,建议至少60GB,然后选择“Storevirtualdiskasasinglefile”.最后一步则是按下“Finish”来完成CentOS的设定VMwareCentOS的安装安装完成后,会显示CentOS的登入画面,此时可用之前设置的用户名称及来登补齐组多数的Linux版不会将所有的原件都安装.但有些组件在使用BSP的开发过程中是必须的.另外有些组件可让开发的过程更加顺利.以下列了一些Linux安装过程会省略,但必必须/建交叉编译去所需动态链结的32(i386版本或串口控制面板,可用来显示以及控制U-各个Linux版的组件安装接口不尽相同.Ubuntu的使用者可以使用apt-get命令或是SynapticPackageManager来安装组件.而Fedora的使用者可以使用rpm命令或是PackageManager来安装组件.请参考所使用的Linux版文件来安装缺少的组件.BSP安装步LinuxBSP包含了三 . 一个包含了交叉编译工具,预编映像文件以及根文件系统的压缩包sBSPWindows上的NuWriter刻录工具以及驱动程序以及SDBSP的源码可以使用repo工具.以下使使用repo的方式.确认账号主目录下存在bin/ ,且路径有加入path环境变量中.$$mkdir$exportrepo工具并设定可执行属性.$/git-repo-downloads/repo>$oda+x产生一个空的工 $$mkdir$cd设定git使用的及电子邮件地址$$"Your$gitconfig--global""使用以下两个命令其中之一NUC980BSP的manifest.第一个是从,第二个是从Gitee.使用者依据所在的的连接速度择一使用即可$$repoinit-/OpenNuvoton/manifest.git-bnuc980-2019.03或$$repoinit-umgitee.xml/OpenNuvoton/manifest.git-bnuc980-2019.03接着用以下命令源码$$repo完源码后,请将 中的压缩包到Linux开发机器上.并使用以下令解$$tarzxvf在 中有安装install.sh.此需要管理者权限才可以执行.可以选择使用命令切换到管理者来执行$$Password:(Enterpasswordofroot)#./install.sh或是使用sudo来执行安装(若是安装的Linux没有开放root权限,例如Ubuntu,则可以使用本方式来安装BSP)##sudo以下为安装过程的控制台输出过程中输入的需要跟之前设定的WORKING_DIR相同NowNowinstallingarm_linux_4.8toolchainto/usr/local/SettingtoolchainenvironmentInstallingarm_linux_4.8toolchainsuccessfullyInstallrootfs,applications,u-bootandLinuxkernelPleaseenterabsolutepathforinstalling(eg:/home/<username>):BSPwillbeinstalledin/<pathyouinput>/nuc980bspExtractrootfsandpre-build若是使用的Linux开发环境之前已经安装过新唐提供的交叉编译工具,安装会询问是否须复写编译工具,否则并不会询问使用者,而是直接在/usr/local/arm_linux_4.8安装编译工具在第一种已安装过编译工具的情况下若是要复写Yyes、yYES),然后按Enter键.安装完叉编译工具后,安装会询问安装Linux内核,U-Boot,以及范例程序的绝对路径.下表列出了会装在指定中的项目.范例程序以及开源软件范例程序以及开源软件例如busybox,wireless可用来编译内核可用来编译内核,交叉编译工具,应用程序…等的集合使用默认设置预先编译好的支持使用默认设置预先编译好的支持NAND或SPIflash的U-Bootenv.txtU-Boot的默认执行地址均为0xE00000。U-BootU-BootV2016.11u-boot-u-boot-linux-image/U-

Linux下使 令行接口安装会尝试将安装的设置正确权限,并将交叉编译程序的路经加至系统搜寻路径($PATH)中Linux版本中可能发生无法正确设置的问题.此时需麻烦使用者手动设置正确的权限并且将/usr/local/arm_linux_4.8/bin加到$PATH中.请注意,在安装完成后,使用者须先注销再登入$PATH的设定才会生效透过Git使用者可以自行至源码仓库源码.完后,可以至源码仓库以gitpull命令同步的更新.以下列出各个源码仓库的链结.Git的操作指令不在本文件的说明范围,但可以至 /查询基本的操作方式./OpenNuvoton/NUC980Linux/OpenNuvoton/NUC980/OpenNuvoton/NUC980linux-/OpenNuvoton/NUC980-linux-/OpenNuvoton/NUC970_U-Family/NUC980NuWriter.gitLinuxCommandLine/OpenNuvoton/NUC980NuWriterSD/OpenNuvoton/NUC980Family/NUC980SDWriter.gitLinux内内核设置界Linux内核支持各式不同的设置.可将不需要的功能移除,只保留需要的功能.减少内核所要进入内核设置页面,请在linux-3.10.x下输入“makeconfig”令.内核设置选单是多层次的.在本页面内,可透过上,下,左,右,四个箭头键控制选单的位置.上,下键选择要控制的内核功能.左,右键则是选择了下排的功能按钮.要进入更深一层的选单时,按下“Enter”键即可.下一排的按钮有五个,停留在“Select时,可透过空格键始能及失能内核功能.显示[]代表此功能失能.[*]代表始能.[M]代表此功能边一层模块,可动态加载.下排按钮停留在“Exit”时,按空格键可带往上层选单,若已在最上层选单,回出现提示是否要并退出.“Help时按下空格键可显示帮助画面.“Save以及“Load”则是用来当前设置,或是加载设置.在设置完成后“.config”linux-3.10.x下默认设新唐为NUC980系列提供了默认设置.建议使用这要更改内核设置前,先加载默认设置,再进行更改.使用者可透过“makenuc980_defconfig”有时因内核设置错误造成无法开机时,也可使用此命令将内核设置还原到可开机的状态..Linux内核设本节依据不同的驱动或功能,介绍所需使能的内核设置有些驱动程序只支持动态加载,例如USBWiFi驱动程序,或是USBdevice的驱动…等.请依照下的设定使能挂载模块支持.在上电进入s后,可使用“insmod<模块名称>来加载模块.[*][*]Enableloadablemodulesupport使能挂载模块支持后,若是系统需要支持动态卸除,请依照下的设定使能挂载模块支持.要卸除模块时,可使用“rmmod<模块名称>来卸除模块.[*][*]Enableloadablemodulesupport 开机命令可以用来设置系统包含了根文件系统型态内存大小console波特率以下只是一个简单的设置,内核还另外支持了众多令.可参考ation/kernel-parameters.txt中的说明BootBootoptions(root=/dev/ram0console=ttyS0,115200n8rdinit=/sbin/initmem=64M)DefaultkernelcommandstringKernelcommandlinetype(Usebootloaderargumentsifavailable)-->开机命令设置–以SPIFlashJFFS2文件系统为根文件系统的设定开机命令可以用来设置系统包含了根文件系统型态,内存大小,console波特率等.使用这个设JFFS2(5.3.4文件系统设置),并且取消RAM根文件系GeneralGeneralsetup[]InitialRAMfilesystemandRAMdisk(initramfs/initrd)下列范例是需要先将根文件系统使用mkfs.jffs2JFFS2格式的镜像文件再烧入至mtdblock1所在的位置,当内核依据下列开机命令将根文件系统带BootBootoptions(root=/dev/mtdblock1rwrootfstype=jffs2console=ttyS0,115200n8rdinit=/sbin/initmem=64M)DefaultkernelcommandstringKernelcommandlinetype(Usebootloaderargumentsifavailable)-->开机命令设置–以NANDFlashYAFFS2文件系统为根文件系统的设定开机命令可以用来设置系统包含了根文件系统型态,内存大小,console波特率等.使用这YAFFS2(5.3.4),RAM根GeneralGeneralsetup[]InitialRAMfilesystemandRAMdisk(initramfs/initrd)下列范例是需要先将根文件系统制作成YAFFS2格式的镜像文件,再烧入至mtdblock2所在的位置,uboot环境变量也要设定,当内核依据下列开机命将根文件系统带起BootBootoptions(noinitrdroot=/dev/mtdblock2rootfstype=yaffs2rootflags=inband-tagsconsole=ttyS0,115200n8rdinit=/sbin/initmem=64M)DefaultkernelcommandKernelcommandlinetype(Usebootloaderargumentsifavailable)-->uboot环境变量要直接由内核变量带起则设定如下BootBootoptions(noinitrdroot=/dev/mtdblock2rootfstype=yaffs2rootflags=inband-tagsconsole=ttyS0,115200n8rdinit=/sbin/initmem=64M ignore_loglevel)DefaultkernelcommandstringKernelcommandlinetype(Usebootloaderargumentsifavailable)-->开机命令设置–以NANDFlashUBIFS文件系统为根文件系统的设定开机命令可以用来设置系统.包含了根文件系统型态,内存大小,console波特率等.使用这个UBIFS(5.3.4文件系统设置),RAM根文件GeneralGeneralsetup[]InitialRAMfilesystemandRAMdisk(initramfs/initrd)UBIFS格式的镜像文件,mtd2所在的位置,当内核依据下列开机命令将根文件系统带起.BootBootoptions(noinitrdubi.mtd=2root=ubi0:systemrwrootfstype=ubifsconsole=ttyS0,115200n8rdinit=/sbin/initmem=64M)DefaultkernelcommandstringKernelcommandlinetype(Usebootloaderargumentsif -->NFSrootfsrootfsNFS的方式挂载,BootBootoptions(noinitrdroot=/dev/nfsnfsroot=x.x.x.x:/path_to_nfs_rootfs(noinitrdroot=/dev/nfsnfsroot=x.x.x.x:/path_to_nfs_rootfsip=y.y.y.y:z.z.z.z:g.g.g.g:m.m.m.mconsole=ttyS0,115200n8rdinit=/sbin/initmem=64M)Defaultkernelcommandstring其中,x.x.x.x和z.z.z.z均代表NFS服务器的ip位置,y.y.y.y代表本机的ip位置,g.g.g.g代表gateway的ip位置,m.m.m.m代表netmask的ip位置。bootoptions之后,还需要启动网络功能(3.3.2),另外以下功能[*][*]Networkingsupport>Networkingoptions> IP:kernellevelFileFilesystems[*]NetworkFileSystems Rootfilesystemon支持设备树若是需要使用设备树功能,请依照以下的方式设置.[*][*]FlattenedDeviceTree SupportforthetraditionalATAGSbootdatapassingFile TCP/IP设要使能基本的网络功能,请依照以下设置即可[*][*]Networkingsupport>Networkingoptions><*>Packet<*>[*]TCP/IP IP:WiFi若是要使用无线网络设备,除了以上的TCP/IP设置需使能外,[*][*]Networkingsupport> Wireless><*>NuvotonexternalWiFidriver<*>GenericIEEE802.11NetworkingStackDeviceDrivers[*]Networkdevicesupport WirelessLAN>DeviceDrivers<*>DeviceDrivers<*>Soundcardsupport AdvancedLinuxSoundArchitecture ALSAforSoCaudiosupport SoCAudioforNUC980NUC980I2SsupportfordemoI2SModeSelection(MasterMode)I2S支持主模式或从模式,用户可透过选单决定运作的模式I2S选定时NAU8822codec驱动将被自行被选中另外,I2C功能,系统才能正确侦测到NAU8822装置.audioOSS架构编写可使能以下两个选项ALSA架构可参考音效范例程序alsa_audio.(源码位于下DeviceDeviceDrivers<*>Soundcardsupport AdvancedLinuxSoundArchitecture OSSMixer OSSPCM(digitalaudio)CryptographicAcceleratorNetowrkingsupportPF_KEY[*][*]Networkingsupport>Networkingoptions><*>PF_KEYCryptographicAPICryptographicCryptographicAPI<*>Userspacecryptographicalgorithmconfiguration[*]Disablerun-timeselfests<*>Softwareasynccrypto<*>User-spaceinterfaceforhash<*>User-spaceinterfaceforsymmetrickeycipheralgorithms[*]Hardwarecryptodevices><*>SupportforNUC980CryptographicNUC980CryptographicAccelerator硬件支持AES,DES,及3-DEScrypto算法,及支持SHA及HMAChash演算法.可参考范例程式crpyto.(源码位于BSP/applications/demos/crypto下)NUC980CryptographicAccelerator硬件还提供了个硬件随机数(PRNG;PseudoRandomNumberGenerator)。要打开随机数 ,必须要先将上述的cryptodevice驱动选取,然后才会出现可供选择的硬件随机数 DeviceDeviceDriversCharacterDevices<*><*>HardwareRandomNumberGeneratorCore<*>NuvotonHWRandomNumberGeneratorNUC980系列支持DMA功能.要在内核中使能DMA,必须进入”DMAEnginesupport”选单中,开启”NUC980DMAsupport”如果要在内核中使用,如果需要实际了解dmatest.c的运作流程,可以开启”DMATest”.DMAtest将会被自行被带起.DeviceDeviceDrivers[*]DMAEnginsupport NUC980DMA DMADeviceDriversDeviceDrivers>Characterdevices>[*]Supportfor/dev/nuc980-2DNUC980系列支持了两个网口,可分别开起或同时开启要支持网口,除了网口驱动外,PHY驱动需要一并使能.NUC980开发版上使用的是ICPlus的PHY,若是使用了不同PHY设置需做相应的修改NUC980可支持透过MagicPacket唤醒ethtool开启此功能.MagicPacket的格式依循AMD的MagicPacketTechnology白皮书规范.ethtool工具的使用请参考4.1节ethtool的说明.DeviceDeviceDrivers[*]Networkdevicesupport<*>Dummy<*>Dummynetdriver EthernetdriversupportNuvotonNUC980EthernetMACNuvotonNUC980EthernetMAC PHYDevicesupportandinfrastructure DriversforICPlusEtimerNUC980内核执行时,使用基本型时钟来计时.另外还提供了四通道的加强型时钟可输出50%占空比的输出,或是支持捕获的功能.四个信道可以独立控制功能.以下是相关的设置画面“Nooutput“Noinput即可以下的Etimer01PC.6PC.8当输出23PC.11PC.13当作捕获管脚请使能”NUC980EnhanceTimer(ETIMERwake-upsupport”来DeviceDeviceDrivers>Miscdevices<*>NUC980EnhanceTimer(ETIMER)<*>NUC980EnhanceTimer(ETIMER)wake-upNUC980ETIMERchannel0toggleoutputpin(OutputtoPC6) NUC980ETIMERchannel0captureinputpin(Noinput) NUC980ETIMERchannel1toggleoutputpin(OutputtoPC8) NUC980ETIMERchannel1captureinputpin(Noinput) NUC980ETIMERchannel2toggleoutputpin(Nooutput) NUC980ETIMERchannel2captureinputpin(InputfromPC11)--NUC980ETIMERchannel3toggleoutputpin(Nooutput) NUC980ETIMERchannel3captureinputpin(InputfromPC13)应用程序可透过ioctl()来控制加强型时钟的功能,目前支持了唤醒系统,periodic,toggleout,triggercountingmode,以及countingmode等五个功能.唤醒系统功能,可以设定不同的叫醒时间来唤醒系统.在捕获模式下(triggercountingmode),所捕获到的值可经由read()读回.单位是us,代表了两次触发条件的间隔.countingmode会测量外部引脚的输入频率,所捕获到的值可经由read()读回,单位是Hz,代表外部引脚的输入频率.所有的功能可以参考BSP中所附的范例程序(源码位于BSP/applications/demos/etimer)来开发所需要的功能.(SmartcardNUC980拥有两个智能卡接口,符合ISO-7816以及EMV2000规范.若是系统中有使用智能卡的需求,可以参考以下的设定,使能智能卡的驱动.这份智能卡驱动支持了T=0T1的智能卡.两个接口可以分别设置卡插拔侦测的准位,以及上电时需要给高电位或是低电位.这个设定跟外部线路以及使用的卡槽有关.0可以选择使用PortA或是PortC的管脚,接口1可以选择使用PortC或是PortF的管脚.当打开PerformEMVcheck的选项时,驱动会执行较为严格,符合EMV规范的检查.DeviceDeviceDrivers>Miscdevices><*>NUC980SmartcardInterfacesupport[] PerformEMVcheck NUC980SC0NUC980SC0pinselection(UseportA)NUC980SC0CDpinconfig(CDhighascard [InverseSC0powerpin NUC980SC1NUC980SC0pinselection(UseportC)NUC980SC1CDpinconfig(CDhighascard [InverseSC1powerpin应用程序可透过ioctl()来控制智能卡接口.以下列出支持令以及功用.实际使用可以参考BSP中所附的范例程序(源码位于BSP/applications/demos/sc SC_IOC_GETSTATUS:判断目前卡槽的状态,例如是否插入还是拔出.SC_IOC_ACTIVATE激活智能卡若是成功ioctlATR的长度.SC_IOC_READATR:智能卡回复的ATR(Answertoreset)SC_IOC_DEACTIVATE:关闭智能卡.SC_IOC_TRANSACT:透过sc_transact这个结构体对智能卡下命令并响应.请注意,进入省电模式前,智能卡会被关闭.系统唤醒后,若是应用程序要读写智能卡,必须重新激活智能卡NUC980系列支持GPIO接口控制,要让内核支持GPIO的控制,请使“NUC980GPIOsupport以及DeviceDeviceDrivers[*]GPIOSupport NUC980GPIONUC980externalI/Owake-upGPIO驱动程序将NUC980系列的GPIO口,从GPIOA~GPIOJ每组IO都保留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编号sysfsGPIO口sys/class/gpio/…”GPIO操作接口,可以透过下列方法来控制GPIO/sys/class/gpio/export来告诉系统需要控制哪个/sys/class/gpio/unexportGPIO/sys/class/gpio/gpio0/directionGPIOA00in/sys/class/gpio/gpio0/valueGPIOA001$echo0>$echo0>$echoout$echo1也可以参考范例程序中的gpio_demo(源码位于BSP/applications/demos/gpio 在其他的驱动程序中可以透过下步骤控制GPIO:在驱动程序中加入#inlcudearch\arm\mach-nuc980\inlcude\mach\gpio.h决定使用哪个以NUC980_PC7为例子如下设定输入模式 设定输出 gpio_set_value(NUC980_PC7,1设定输出 gpio_set_value(NUC980_PC7,0取值 GPIO是否正在使用:gpio_request(NUC980_PC7,取得GPIO中断号码:GPIO中断范例staticstaticirqreturn_tPC7IntHandler(intirq,void{printk(KERN_INFO"PC7IntHandler:irq=%d\n",irq);returnIRQ_HANDLED;}int{intret=gpio_request(NUC980_PC7,if(ret)printk("NUC980_PC7failedret=%d\n",ret);request_irq(irqno,PC7IntHandler,IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING,}需要让GPIOpowerdown模式中叫醒,可以开启”NUC980externalI/Owakeupsupport”功能.linux-3.10.x/drivers/gpio/gpio-nuc980.cEINT0EINT1,EINT2,EINT3,EINT4,EINT5,EINT6,EINT7的设定.以EINT0为例子如下:*ExternalInterrupt0*Thisfunctionwillbeusedbystaticirqreturn_tnuc980_eint0_interrupt(intirq,*dev_id){printk("@0\n");returnIRQ_HANDLED;}/*IfenableIRQ_EXT0_H0orIRQ_EXT0_F11,linuxwillenableUsercanmodifytriggertiypesasbelowIRQF_TRIGGER_FALLING/IRQF_TRIGGER_RISING/IRQF_TRIGGER_HIGH/structnuc980_eint_pins//{IRQ_EXT0_H0,nuc980_eint0_interrupt,IRQF_TRIGGER_FALLING|//{IRQ_EXT0_F11,nuc980_eint0_interrupt,IRQF_TRIGGER_FALLING|nuc980_eint0_interruptnuc980_eint_pinseint0从那一个GPIOpinstaticstaticirqreturn_tnuc980_eint0_interrupt(intirq,*dev_id){printk("@0\n");returnIRQ_HANDLED;}structnuc980_eint_pins{IRQ_EXT0_H0,nuc980_eint0_interrupt,IRQF_TRIGGER_FALLING|GPIOI²C除了使用硬件I2C,尚可使用IO模拟的方式来实现I2C控制,透过修改arch/arm/mach-nuc980/dev.c中i2c_gpio_adapter_data结构来选择使用的脚位.如设定.sda_pin=NUC980_PG1,.scl_pin=NUC980_PG0即是使用PG0为SCL脚,PG1为SDA脚.DeviceDeviceDrivers<*>I2CsupportI2CHardwareBussupport<*>GPIO-basedbitbangingI²C接口设²接口的设置如下DeviceDeviceDrivers<*>I2CsupportI2CHardwareBussupport<*>NUC980I2CDriverforPortNUC980I2C0pinselection(SDA:PA_0SCL:PA_1)<*>NUC980I2CDriverforPortNUC980I2C1pinselection(SDA:PA_13 <*>NUC980I2CDriverforPortNUC980I2C2pinselection(SDA:PB_7SCL:PB_5)<*>NUC980I2CDriverforPortNUC980I2C3pinselection(SDA:PB_1SCL:PB_3)I2Cport1有多组的管脚可选择使用Port-A,Port-B…I2CNUC980I2C硬件模块进行I2C控制内建I2Cport0是NAU8822,使用者可自行修改/新增或修改至port1,修位DeviceDrivers<*>I2Csupport[*]I2CDeviceDrivers<*>I2Csupport[*]I2Cslave<*>I2CeepromslaveMTDNANDflashNANDflash是使用的驱动是挂在MTD子系统之下可按照以下设置使能DeviceDeviceDriversGenericDriverOptions<*>NuvotonNUC980FMIfunctionSelectFMIdevicetosupport(SupportMTDNANDFlash)*-MemoryTechnologyDevice(MTD)support Commandlinepartitiontable CachingblockdeviceaccesstoMTD-*-NANDDeviceSupport NuvotonNUC980MTD驱动中的基本设置如果需要由U-boot环境变量传入就必须将”Commandlinepartitiontableparsing选上,否则会使用驱动程序里的默认配置,主要会将MTD分为三块空间.上电进入s后,分别是/dev/mtdblock0,/dev/mtdblock1,以及/dev/mtdblock2.第一块是放置U-Boot的空间,第二块放置内核文件,第三块则是用来挂载YAFFS2或UBIFS文件系统的空间若是配置有需要更改例如增加或减少分区改变分区大小.请直接编辑uboot/include/nuc980_evb.h或drivers/mtd/nand/nuc980_nand.c.980要支持,请依以下的设定使能,使用的管脚可能须依系统改变.不须使用的通道选择“Nooutput”即可.DeviceDeviceDrivers )Support 0outputpin(OutputfromPB2)1outputpin(OutputfromPB3)2outputpin(Nooutput)3outputpin(Nooutput)要透过sysfs控制,首先在系统开机后,进入/sys/class//,里面可看到四个(chip0~3),每一组代表着一个通道.要使用前,先进入要控制的通道目录执行echo0>export,此时会多生成一个0.接着就可以开始控制这个通道了.在新生成的中有几个文件可用来控制,它们的意义列在下表.控制周期,单位是ns.目前驱动支持的最小单位是us,以打出之周期波为例echo20000period设置占空比.单位是ns.目前驱动支持的最小单位是us,15us之占空比为例echo15000period设置输出相位.可支持echonormal>polarity正向输出,或 normalpolarity使能及失能控制.要使能,使用echo1>enable命令 要使能则echo0enable$cd$$$cd$$ $980nsubsystem980$echo0>export980$lsn0subsystem980$980$duty_cycle 1>300000>100000>RealtekRTL8188802.11WiFi要支持RTL8188USBWiFi功能的话,除了内核本身无线网络功能要使能,USBhost驱动要使能外,以及挂载模块支持要使能外,还需依照WiFi无线网络设置开启相RTL8188的源码并没有包含在BSP中.若是需要源码,请跟模块厂索取,新唐科技无法提供.这个驱动的使用说明如下.上电进入s后,使用insmod命令加载模块$$insmod$$ifconfiglo$ifconfigwlan0使用_supplicant连接无线$_supplicant–Dwext–iwlan0–c<configfile>-其中需指定台的联机配置文件,以下是台设置成AES联机时的范例设 }RealtekRTL8192802.11WiFiRTL8192SDIOWiFi功能的话除了内核本身无线网络功能要使能SDIO驱动要使能外以及挂载模块支持要使能外还需开启以下的功能<*>NuvotonexternalWiFidriverRTL8192的源码并没有包含在BSP中若是需要源码请跟模块厂索取,新唐科技无这个驱动的使用说明如下上电进入s后,使用insmod命令加载模块$$insmod$$ifconfigwlan0使 $_supplicant–Dwext–iwlan0–c<configfile>-其中需指定台的联机配置文件,以下是台设置成AES联机时的范例设 }NUC980系列带有11个串口,可以分别独立设置.请依以下的说明来使能串口功能.每个串口可以单独的开关.除UART0,UART3,UART5外,有多组管脚可选择,需要一并设置.其中,UART0这组串口是保留给console使用的.不须特别使能.UART0UART3UART5UART7UART9外,用户可以开关唤醒功能DeviceDriversDeviceDrivers>Characterdevices>Serialdrivers[*]NUC980serialNUC980UART1EnableUART1CTSwake-upNUC980UART1pinselection(Tx:PE2,Rx:PE3)NUC980UART2EnableUART2CTSwake-upNUC980UART2pinselection(Tx:PF11,Rx:PF12)NUC980UART3NUC980UART4EnableUART4CTSwake-upNUC980UART4pinselection(Tx:PC10,Rx:PC11)NUC980UART5NUC980UART6EnableUART6CTSwake-upNUC980UART6pinselection(Tx:PB2,Rx:PB3)NUC980UART7NUC980UART7pinselection(Tx:PG4,Rx:PG5)NUC980UART8EnableUART8CTSwake-upNUC980UART8pinselection(Tx:PE10,Rx:PE11)NUC980UART9NUC980UART9pinselection(Tx:PH2,Rx:PH3)EnableUART10CTSwake-upNUC980UART10pinselection(Tx:PB10,Rx:PB11)ConsoleonNUC980serial若是串口需要作为红外控制使用则除了要使用的串口需要使能外红外模块的驱动[*][*]Networkingsupport IrDA(infrared)subsystemsupport>Infrared-portdevicedrivers><*>NUC980SIRonSD卡接口使能的设置NUC980SD卡接口DeviceDeviceDrivers<*>MMC/SD/SDIOcardsupport MMCblockdeviceUsebouncebufferforsimple NuvotonNUC980SDCard上电进入s后,若是侦测到有卡插入,会在/dev下出现一个mmcblk0装置.若卡上有分区,会依分区方式另外出现mmcblk0,mmcblk1…等设备.NUC980SPI接口可以单独使能或是同时使能以下是同时使DeviceDriversDeviceDrivers>[*]SPIsupport><*>NuvotonNUC980SeriesQSPIPortQSPI0pinselection(Normalmode)<*>QSPI0enablepinforthesecondchipselectPinselection(UseSS1(PD0))><*>NuvotonNUC980SeriesSPIPortSPI1IOportselection(PortD)< SPI1enablepinforthesecondchipQSPI0normalquadSPI的脚位数量,Normal4个脚或者Quad为(6个脚。另外有第二组片选脚可供选择。SPI0SPI1Normalmode使用者也可以选择开启第二组片选脚。如要使用SPIflash,需要开启MTD功能,使能如下选项:DeviceDeviceDrivers<*>MemoryTechnologyDevice(MTD)support CachingblockdeviceaccesstoMTDdevicesSelf-containedMTDdevicedrivers><*>SupportmostSPIFlashchips(AT26DF,M25P,W25X,另外JFFS2文件系统的功能也要一并选上如此才能正确使用SPIFlash装置.JFFS2文件系统的设置方式请参考文件系统设置的章节.LinuxSPIflash才能对其读写SPIflash型号,请修改/新增drivers/mtd/devices/m25p80.c中的m25p_ids结构staticstaticconststructspi_device_idm25p_ids[]=/*Atmel--someare(confusingly)marketedas"DataFlash"{"at25fs010",INFO(0x1f6601,0,32*4,SECT_4K){"at25fs040",INFO(0x1f6604,0,64*8,SECT_4K){"en25qh16",INFO(0x1c7015,0,64*1024,32,0){"cat25128",CAT25_INFO(2048,8,64,2){arch/arm/mach-nuc980/uc980_spi_flash_data结构.typem25p_ids结构中的其中一个字符串相同不然无法比对到正确装置.staticstaticstruct tform_datanuc980_spi_flash_data=.name=.parts=.nr_parts.nr_parts=.type=如欲修改SPIFlashpartition数,则可修 arch/arm/mach-nuc980/dev.c中nuc980_spi_flash_partitions结构staticstaticstructmtd_partitionnuc980_spi_flash_partitions[]={.name="SPI.size=,.offset=SPIslaveNUC980SPI接口slave.QSPI0接口当SPIDeviceDeviceDrivers>Misc<*>NUC980QSPI0slavemodeQSPI0pinselectionbytransfermode(Normalmode)<>NUC980SPI0slavemode<>NUC980SPI1slavemode三个SPIslave范例程序放在drivers/misc 下,文件名分别为nuc980-qspi0-slave.c,nuc980-spi0-slave.c,以及nuc980-spi1-slave.cQSPI0slavemaster“0x9f命令,准备资料并回复给masterstaticstaticintQSPI0_Slave_Thread_TXRX(structnuc980_spi{unsignedunsignedcharunsignedlongflags;inti;while(1)wait_event_interruptible(slave_done,(slave_done_staterx raw_readl(hw->regs+//printk("Receive[0x%x]\n",switch(rx)casefor(i=0;i<QSPI0_SlaveDataLen;i++)QSPI0_SlaveData[i]=i;}InTransmitted=slave_done_state=0;}}}slaveNUC980SPINANDSPINAND的说明:首先使能SPIDeviceDriversDeviceDrivers>[*]SPIsupport><*>NuvotonNUC980SeriesQSPIPortQSPI0pinselection(Normalmode)<*>QSPI0enablepinforthesecondchipselectPinselection(UseSS1(PD0))><*>NuvotonNUC980SeriesSPIPortSPI1IOportselection(PortD)< SPI1enablepinforthesecondchipMTD功能DeviceDeviceDrivers<*>MemoryTechnologyDevice(MTD)support CachingblockdeviceaccesstoMTDdevicesSelf-containedMTDdevicedrivers><*>SupportmostSPIFlashchips(AT26DF,M25P,W25X, NANDDeviceSupport SPI-NORDeviceSupportSPINANDDeviceDeviceDrivers<*>Stagingdrivers SPINANDDeviceLinux内核需正确的判断SPINANDflash才能对其读写.要让内核识别新的SPINANDflash型号请修改/drivers/mtd/nand/nand_and_flash_ids结构structstructnand_flash_devnand_flash_ids[]=*patibleNANDchipssharedeviceID'sandsomustlistedbyfullID.Welistthemfirstsothatwecanthemostspecific{"W25N01GV1G{.id={0xef,0xaa}},SZ_2K,128,SZ_128K,0,2,64,NAND_ECC_INFO(1,SZ_512)},{"TC58NVG0S3E1G3.3V8-{.id={0x98,0xd1,0x90,0x15,0x76,0x14,0x01,0x00}},SZ_2K,SZ_128,SZ_128K,0,8,64,NAND_ECC_INFO(1,SZ_512),2arch/arm/mach-nuc980/uc980_spi_flash_data结构.nameSPINAND驱动中的名字(.name)一致,否则内核无法启动驱动..driver===例如.driver====arch/arm/mach-nuc980/dev.c中的nuc980_qspi0_flash_data结构中的.name也必须取名staticstaticstruct tform_datanuc980_qspi0_flash_data=.name=nuc980_qspi0_board_info.modaliasstaticstaticstructspi_board_infonuc980_qspi0_board_info[]initdata{#ifdef{.modalias=USBHost要支持USBHost,请先勾选打开USBHost端支持。NUC980USBHost包含EHCI(USB2.0)及OHCI(USB1.1)两个USBHost控制器,必须同时打开。以下所列之项目必须全部勾选:DeviceDriversDeviceDrivers>[*]USBsupport> EHCIHCD(USB2.0)NUC980EHCI(USB2.0)NUC980NUC980USBHostportpowerpinselect(NoUSBH_PPWRxandNUC980turnoffUsbHotsVBUSpowerwhilepowerOHCIHCDNUC980OHCI(USB1.1)其中在“NUC980EHCI(USB2.0)support”,依据所使用的型号,选择USBHostportpowerpin.选单如下:[[]PE.14andPE.15forUSBH_PPWR0/1,PH.1forUSBH_OVRCUR[]PF.10,PH.1forUSBH_OVRCUR[]NoUSBH_PPWRx,PH.1for[X]NoUSBH_PPWRxand如果USBHost电路设计上使用了PowerSwitchIC,那么可选择USBHostport0及port1分别由PE.14及PE.15控制;或是选择统一由 PF.10控制。当选择使用USBH_PPWRx的情况下,USBH_OVRCUR就会被用来当作过电流保护指示脚来使用。如果电路设计没有采用PowerSwitchIC,而是直接供电给USBport,那么USBH_PPWRx就可以挪作GPIO使用,可选择第三个或第四个选项。如果过电流保护指示脚也不需要,那么可以选择第四个选项。NUC980USBHostpowerdown(休眠)模式下,选择是否关闭VBUS供电。 NUC980turnoffUsbHotsVBUSpowerwhilepower如果使用者不勾选这项设定,那么在系统休眠的时候,NUC980USBHost仅会关闭USBPHY电源,而不关闭VBUS电源。由于VBUS仍然保持供电,所以USB装置尽管处于suspend(暂停)状态,它仍然可以获得NUC980USBHost的供电,以维持如果使用者勾选了这项设定,那么在系统休眠的时候,NUC980USBHost会同时关USBPHYVBUSUSBbusUSBdevice来说,这就像当于断电了。当系统唤醒时,NUC980USBHost重新对USBPHY及VBUS供电,这相当于所有的USB装置断开之后的重新连接,因此,所有连接的USB装置都需要USBHostUSBMassstorage除了NUC980的USBhost驱动需要设置,另外还需选择所要支持的装置类别,例如MassStorage.若是要选择MassStorage,则需先开启SCSI设备支持,才会出现MassStorage的选项DeviceDeviceDriversSCSIdevicesupport SCSIdevice<*>legacy/proc/scsi/<*>SCSIdisk<*>SCSImediachangersupport[*]AsynchronousSCSIscanning[*]SCSIlow-leveldrivers[*]USBsupport USBMassStorageUSBHost与 Class装置设如果要支持USBClass(UVC)视讯装置,必须打开下列的设置选项DeviceDriversDeviceDrivers>Multimediasupport><*> <*>MediaController<*>V4L2sub-deviceuserspace<*>V4L2int<*>MediaUSBApapters<*>ClassUVCinputeventsdevice<*>tformGraphicssupport<*>Supportforframebufferdevices>[*]NUC980LCDframebuffersupportUSBHostHIDUSBHIDUSBmouse,keyboard…)USBhost的功能外,另外需开启HID及input的功能,请参考以下的设置。DeviceDeviceDriversHIDsupportHIDbussupport User-spaceI/OdriversupportforHID USBHIDsupport><*>USBHIDtransportInputdevicesupport Keyboards Mice PS/2USBHostUSB如欲使用USBmodem等装置,除了需要USBhost的功能外,另外需开启以下的设置。DeviceDeviceDrivers[*]USBSupport[*]USBSerialConvertersupport[*]USBdriverforGSMandCDMAUSBDeviceMassStorageDeviceDeviceDrivers[*]USBsupport<*><*>USBGadgetSupportUSBPeripheralController<*>NUC980USBDevice<M>USBGadget<M>MassStorage编译完内核后,会产生三个module文件,fs/configfs/configfs.ko, posite.ko,drivers/usb/gadget/g_mass_storage.ko,需要将此三个文件到rootfs或是系统可以存取到的地方。USBMassStorageGaget的使用方法如下(mmcblk0p1装置为例$$insmod$$insmodg_mass_storage.kofile=/dev/mmcblk0p1stall=0USBDeviceSerialDeviceDrivers>[*]DeviceDrivers>[*]USBsupport><*>USBGadgetSupportUSBPeripheralController<*>NUC980USBDevice<M>USBGadget<M>SerialGadget(withCDCACMandCDCOBEX编译完内核后,会产生七个module文件, drivers/usb/gadget/usb_f_acm.ko,drivers/usb/gadget/usb_f_obex.ko,需要将此七个文件复制到rootfs或是系统可以存取到的地方。USBSerialGaget$$insmod$$insmod$$insmod$insmod$insmod$insmodg_serialgadget:GadgetSerialv2.4g_serialgadget:g_serialreadyVCAP影像撷取接口设NUC980系列支持-Capture接口,在内核中使能此功能,首先必须开启“cameras/grabberssupport”,然后进入“rdecoders,sensorsandotherhelperchips”选项中,开启“NUC980-insupport”并且选择摄影机的型号,目前支持OV7725,OV5640,NT99050以及NT99141.DeviceDeviceDrivers<*>I2CsupportI2CHardwareBussupport[*]Multimediasupport> grabbers MediaController tformdevicesEncoders,decoders,sensorsandotherhelperchipsIn Maxframe()NuvotonNUC980ImageSensorSelection(NT99141)Capture接口必须使用I2C接口来控制摄影机,所以在开启-Capture接口之前必须设定先开启I2C接口,I2C的部分请参考I2C章节.目前-Capture驱动支持V4l2API,范例部分请参考范例程序中的cap2lcm. ),从cap2lcm的源码中可以看见API如下:xioctl(fdVIDIOC_S_FMT&fmtxioctl(fdVIDIOC_DQBUF&bufxioctl(fdVIDIOC_QBUF,&bufxioctl(fdVIDIOC_STREAMON,&type)启动CAPxioctl(fdVIDIOC_STREAMOFF&typeWatchdogTimer要支持看门狗请参考以下的设置2.03秒用户程序可透过ioctl()下WDIOC_SETTIMEOUT命令更改超时时间.驱动中支持三个不同周期,输入小于2的话,是0.53秒.介于2~8之间的话是2.03秒,而超过8的话是设置成8秒.考wdt范例程序.(BSP/applications/demos/wdt )如果要支持看门狗唤醒系统的功能,请使能“NUC980WDTwake-upsupport”DeviceDeviceDrivers[*]WatchdogTimerSupportNUC980WDTwake-upWindowWatchdogTimer窗口看门狗设置要支持窗口看门狗,请参考以下的设置.DeviceDeviceDrivers[*]WatchdogTimerSupport NuvotonNUC980WindowWatchdogNUC980窗口看门狗与看门狗主要有三个差异,第一,设置始能之后,无法更改设置,无法停止.第二,只能在特定的时间内让窗口看门狗复位,而不是如同看门狗只要还没超时,随时可复位.所以应用程序在使用时,一定要先使用ioctl()的WDIOC_GETTIMELEFT命令取得可复位的时间.只有当返回时间为0,才可使用WDIOC_KEEPALIVE命令窗口看

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论