-
对于使用网络接口的高端HMI产品,怎么说TI的Sitara也是最佳选择呢
答案是AM389x,
强大的显示子系统PowerVR 3D 2000MPoly/Sec, 足以应付HMI所需的各种复杂图形处理要求
强大的处理性能,高达1.5GHz Cortex-A8 准台式工作站般处理能力
片上集成双千兆以太网,让您轻松应对超多路拓扑的需要
-
对于基本文件系统的补充,
如果你不知如何使用busybox来构建相关的文件系统,那么建议购买一套seed-dim3517-kit
当时我在合众达负责相关产品时,组织落实了《SEED-DIM3517文件系统移植指南》。由于时间匆忙的原因,这篇文档可能写得不是尽善尽美,但只要有一点点的基础,看完这篇指南还是可以搞定文件系统这个问题的。
合众达SEED-DIM3517系列产品的光盘提供的全部文档如下
|---03. User Manual
| | |---SEED-DIM3517 硬件用户指南
| | |---SEED-DIM_GB 硬件用户指南
| | |---SEED-DIM3517 快速入门手册
| | |---SEED-DIM3517 3DQT移植指南
| | |---SEED-DIM3517 文件系统移植指南
| | |---SEED-DIM3517 LINUX 软件移植指南
| | |---SEED-DIM3517 QT图形库移植及使用指南
| |---|---SEED-DIM3517 Linux BSP 移植及使用指南
如果有相关的需求,可以直接联系合众达各地的办事处。
这里我就不公布合众达各办事处的联系电话了,否则太有为老东家做广告的嫌疑。
当然了,如果你急需购买一套产品的话,怕走那边的流程太慢,或许想要一个内部价的话,请我吃饭呀(开玩笑的,找合众达官方买是正途)。
-
前面我们讲述了:1内核对耗时较大的功能对启动速度的影响.2内核的大小对启动速度的影响3bootloader对启动速度的影响那么这一节,我们看一下基本文件系统及工具对启动速度的影响.4 基本文件系统对启动速度的影响使用TI arago文件系统的朋友可能会发现一个问题,在内核启动结束到串口看到命令行提示符耗时非常多.这个问题不光在arago文件系统中存在,在以前使用MontaVista Linux的产品上同样存在.如果朋友们有拿秒表测试过的话,会知道,使用MV的文件系统和arago文件系统的启动时间通常在1分半钟甚至在2分钟以上.按说原厂或是专业Linux厂商提供的文件系统应该很好才对,可是为什么反而启动得非常慢呢?其实这就是一对非常典型的矛盾造成的.向MontaVista这样的嵌入式Linux发行版或是厂商提供的Linux文件系统希望能够解决启动速度的问题,但他们又面监一个非常严重的兼容性问题,不同的客户有不同的功能及实用工具需求.而后者是可用性的问题,必须放在第一位来解决的.这个前提一确定,无论发行版厂商或是原厂如何努力,只要您不是下单单独定制相关的文件系统,那么无论如何你的Linux启动都是非常慢的,只是比不做优化稍好点而已.那么是不是我们就没有办法了,如果说你要开发的产品是用来替代PC功能,最终产品除了操作系统由Windows换到Linux以外,仍然少不了PC那样的应用需求.那么建议您还是使用一个发行版会好些,毕竟在这样的系统上满足系统更多的功能需求比启动速度提供两三秒更有意义.如果是功能专一的产品,那么我们有什么理由还让文件系统里存在那些我们八辈子也用不着的东西.套用我们老家的一句话"八杆子也打不着的亲戚,不是亲戚".这时我们可以有两个选择:选择a 使用发行版来开发产品,最后拿发行版的文件系统来进行量体裁衣.这里我要澄清一个概念,以前经常听人说嵌入式系统要做文件系统的裁剪,这样的提法本质上可以说是相当错误的.裁剪是什么意思,就是一个大而全的系统里做减法,百密难免一疏,出来的系统不可能是非常干净的,肯定有很多脏东西(用不到的影响系统速度的东西).因此可以说做减法就像是在拿一件大人的衣服改小给小孩穿,无论裁缝的水平多高,多少这件衣服是有那么一点不合身的.因此最理想的做法是做加法,也就是拿原来的那一堆东西当原理,当成布,用他来设计新衣服.那么应该如何来做这个加法呢. 工具链的提供通常都提供了一个工具ldd. 你可以在产品上运行ldd也可以在主机上运行如arm-linux-gnueabi-ldd. 参数就是你最终为产品开发的那些程序.运行ldd工具,它会列出你的产品都调用了哪些库,这样你只要抓出这些最基本的库加上你开发的东西,足以形成一个最精简的产品文件系统.当然为了满足将来产品方便做现在调试,可能还要加上一些实用小工具,这一块就需要有比较的Linux实用工具背景了,才知道放哪些东西对自己的产品比较合适.但我想对于大部分人ls cat 等基本工具都是必须的.选择a 使用busybox来从头构建自己的全定制文件系统,这也是我个人最喜欢的方式.因为这种方式定制出来的东西,绝对是深度嵌入式的.而已需要加哪些小工具,是直接在一个选择列表里进行选择的,每一个选择项都比较简明扼要的相关说明.然后您应该基于这个文件系统来开发相关的产品软件.这一讲是基本文件系统相关的内容.
-
按照前一讲所述的方法处理后Linux内核的启动已经相当快了。但很多人可能注意到在系统上电以后在内核开始有输出之前使用的时间太长了,可能有几秒。那这是怎么一回事呢?目前由于Linux系统比较庞大,大部份产品都使用了NAND Flash。 大家都知道,NAND Flash本身是不可以CPU直接寻址的,因此不可以直接执行代码,因此要执行NAND里面的代码,就必须把NAND里面的代码复制到RAM里去。Linux内核本身也是系统需要运行的代码,当然也不能免俗。我们知道所有TI的EVM上,我们知道Linux内核的启动是由一个叫作UBoot的启动引导器完成的。那么UBoot要能够从NAND里复制Linux内核,当然是需要时间的。这个时间的长度与两个方面的因素有关系。1. 内核本身的大小。 显然一个1MB大小的内核要花费比一个2MB大小的内核少一半的时间2. UBoot复制内核的速度。对于问题1, 很明显,我们需要加快时间,就必须让内核尽可能的小。这就需要我们非常明确哪些是系统必须的功能。比如一个只有NAND也不会接USB存储器的系统,可能只需要引入一个YAFFS2文件系统,而内核所带的其它文件系统都可以裁掉。不用网络的系统,所有网络相关的内容都可以去掉,即使是使用网络,可能对于大部分人来说IPV6也不是必须以。 通过这一步将内核的大小控制在1MB以下是非常现实的。对于问题2, 这个问题通常不大对于大部分人而言,只要内核裁剪到1MB以下,从UBoot开始加载内核到内核启动完成应该在4秒钟以内(UBoot的等待功能关闭)。当然有些应用中可能需要进一步优化这一块的时间,这里其实还是有比较大的优化空间的,那就是要修改UBoot的MTD相关的驱动了,通过使用DMA来进行NAND的而传输,而不是CPU直接读取的方式。不过这一块获得的好处不会超过0.5秒。其实还有一个隐性的问题,大家都没有注意到。那就是UBoot本身也是代码,也是存放在NAND里面的。系统一上电时,CPU的硬件逻辑只会从NAND里面读取一个块。而这一个块只有小小的几KB。也是不可能存放下全部的UBOOT代码的。也就是UBOOT代码本身要完成其余部分的加载。而在这一块代码的好坏影响非常大。比如说在S3C2410的平台上,DENX提供的默认代码,需要花10秒左右来复制UBOOT的剩余部分。而笔者修改之后只需要0.1秒即可。这主要是由于系统刚开始是工作在较低的主频下造成的。这在Cortex-A8的Sitara平台上可能问题都不大,在UB00t之前TI有一个叫做X-Loader的程序,该程序一上来就已经将CPU设置到最快的运行速度上,这样系统的复制速度应该还可以。那么对于使用ARM926的一些TI产品,你需要检查一下这一块所耗费的时间,如果时间比较长的话,你可以看一下U-Boot/cpu/arm926ejs/start.S文件。在relocate:之前完成CPU时钟的设置。/* * we do sys-critical inits only at reboot, * not when booting from ram! */#ifndef CONFIG_SKIP_LOWLEVEL_INITbl cpu_init_crit#endif#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate: /* relocate U-Boot to RAM */adr r0, _start /* r0 <- current position of code */ldr r1, _TEXT_BASE /* test if we run from flash or RAM */cmp r0, r1 /* don't reloc during debug */beq stack_setupldr r2, _armboot_startldr r3, _bss_startsub r2, r3, r2 /* r2 <- size of armboot */add r2, r0, r2 /* r2 <- source end address */copy_loop: /* 这段循环即是用来复制UBOOT本身的 */ldmia r0!, {r3-r10} /* copy from source address [r0] */stmia r1!, {r3-r10} /* copy to target address [r1] */cmp r0, r2 /* until source end addreee [r2] */ble copy_loop#endif /* CONFIG_SKIP_RELOCATE_UBOOT */这时UBoot相关的情况。
-
在合众达板子上,进入合众达提供的内核源码树目录下执行如下命令,配置内核为合众达出厂配置(这是一种考虑尽量多兼容性的配置)$make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- SEED_DIM3517_defconfig用如下命令编译出默认内核$make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage现在你可以试用一下默认内核感受一下内核的启动速度如果你觉得内核的启动速度已经可以接受,则可以跳过下面的内容。如果你认为速度还需要进一步改善,请接着往下看。这时打开内核的printktimes选项。按下面两个图操作始可 重新生成uImage, 并用新的uImage文件启动。按照在7楼的说法得到内核中各个模块启动时间如下。[975.592071 < 0.035187 >] bio: create slab <bio-0> at 0[975.594665 < 0.002594 >] SCSI subsystem initialized[975.596405 < 0.001740 >] usbcore: registered new interface driver usbfs[975.596893 < 0.000488 >] usbcore: registered new interface driver hub[975.597229 < 0.000336 >] usbcore: registered new device driver usb[975.598419 < 0.001190 >] i2c_omap i2c_omap.1: bus 1 rev3.12 at 400 kHz[975.600860 < 0.002441 >] regulator: VDCDC1: 1200 mV normal [975.601531 < 0.000671 >] regulator: VDCDC2: 3300 mV normal [975.602111 < 0.000580 >] regulator: VDCDC3: 1800 mV normal [975.602691 < 0.000580 >] regulator: LDO1: 1800 mV normal [975.603302 < 0.000611 >] regulator: LDO2: 3300 mV normal [975.603790 < 0.000488 >] i2c_omap i2c_omap.2: bus 2 rev3.12 at 400 kHz[975.615753 < 0.011963 >] pca953x 2-0021: failed reading register[975.615814 < 0.000061 >] pca953x: probe of 2-0021 failed with error -5[975.631347 < 0.015533 >] i2c_omap i2c_omap.3: bus 3 rev3.12 at 400 kHz[975.646972 < 0.015625 >] tca6416-keypad 3-0020: failed reading register[975.647003 < 0.000031 >] tca6416-keypad: probe of 3-0020 failed with error -5[975.647369 < 0.000366 >] pca953x 3-0021: failed reading register[975.647399 < 0.000030 >] pca953x: probe of 3-0021 failed with error -5[975.649597 < 0.002198 >] Switching to clocksource 32k_counter[975.652587 < 0.002990 >] musb_hdrc: version 6.0, cppi4.1-dma, otg (peripheral+host), debug=0[975.673583 < 0.020996 >] AM3517 OTG revision 4ea41001, PHY f0036a2, control 00[975.673980 < 0.000397 >] musb_hdrc: ConfigData=0x1e (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn)[975.674011 < 0.000031 >] musb_hdrc: MHDRC RTL version 1.900 [975.674041 < 0.000030 >] musb_hdrc: setup fifo_mode 4[975.674072 < 0.000031 >] musb_hdrc: 28/31 max ep, 16384/32768 memory[975.674133 < 0.000061 >] musb_hdrc: USB OTG mode controller at c8810000 using DMA, IRQ 71[975.674957 < 0.000824 >] NET: Registered protocol family 2[975.675170 < 0.000213 >] IP route cache hash table entries: 1024 (order: 0, 4096 bytes)[975.675750 < 0.000580 >] TCP established hash table entries: 4096 (order: 3, 32768 bytes)[975.675903 < 0.000153 >] TCP bind hash table entries: 4096 (order: 2, 16384 bytes)[975.675994 < 0.000091 >] TCP: Hash tables configured (established 4096 bind 4096)[975.676025 < 0.000031 >] TCP reno registered[975.676025 < 0.000000 >] UDP hash table entries: 256 (order: 0, 4096 bytes)[975.676086 < 0.000061 >] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)[975.676300 < 0.000214 >] NET: Registered protocol family 1[975.676757 < 0.000457 >] RPC: Registered udp transport module.[975.676757 < 0.000000 >] RPC: Registered tcp transport module.[975.676788 < 0.000031 >] RPC: Registered tcp NFSv4.1 backchannel transport module.[975.677612 < 0.000824 >] AM3517 Linux PSP version 03.00.01.06 (AM3517EVM)[975.677642 < 0.000030 >] NetWinder Floating Point Emulator V0.97 (double precision)[975.679718 < 0.002076 >] VFS: Disk quotas dquot_6.5.2[975.679809 < 0.000091 >] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)[975.681152 < 0.001343 >] Installing knfsd (copyright (C) 1996 okir@monad.swb.de).[975.681915 < 0.000763 >] JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.[975.682556 < 0.000641 >] yaffs Jul 21 2011 23:38:33 Installing. [975.682647 < 0.000091 >] msgmni has been set to 234[975.684478 < 0.001831 >] alg: No test for stdrng (krng)[975.684570 < 0.000092 >] io scheduler noop registered[975.684600 < 0.000030 >] io scheduler deadline registered[975.684783 < 0.000183 >] io scheduler cfq registered (default)[975.743713 < 0.058930 >] OMAP DSS rev 2.0[975.743774 < 0.000061 >] OMAP DISPC rev 3.0[975.743835 < 0.000061 >] OMAP VENC rev 2[975.744262 < 0.000427 >] OMAP DSI rev 1.0[976.093170 < 0.348908 >] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled[976.115844 < 0.022674 >] serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654[976.136901 < 0.021057 >] serial8250.1: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654[976.157775 < 0.020874 >] serial8250.2: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654[976.640075 < 0.482300 >] console [ttyS2] enabled[976.655975 < 0.015900 >] brd: module loaded[976.665496 < 0.009521 >] loop: module loaded[976.669799 < 0.004303 >] omap2-nand driver initializing[976.674407 < 0.004608 >] NAND device: Manufacturer ID: 0xec, Chip ID: 0xdc (Samsung NAND 512MiB 3,3V 8-bit)[976.683166 < 0.008759 >] Creating 5 MTD partitions on "omap2-nand.0":[976.688537 < 0.005371 >] 0x000000000000-0x000000080000 : "xloader-nand"[976.696075 < 0.007538 >] 0x000000080000-0x000000240000 : "uboot-nand"[976.703582 < 0.007507 >] 0x000000240000-0x000000280000 : "params-nand"[976.710388 < 0.006806 >] 0x000000280000-0x000000780000 : "linux-nand"[976.719055 < 0.008667 >] 0x000000780000-0x000020000000 : "jffs2-nand"[976.934783 < 0.215728 >] vcan: Virtual CAN interface driver[976.939331 < 0.004548 >] CAN device driver interface[976.943206 < 0.003875 >] TI High End CAN Controller Driver 0.7[976.948028 < 0.004822 >] failed to get can_stb [976.952362 < 0.004334 >] ti_hecc ti_hecc.1: device registered (reg_base=c8870000, irq=24)[976.960357 < 0.007995 >] usbcore: registered new interface driver hwa-rc[976.966766 < 0.006409 >] usbmon: debugfs is not available[976.971130 < 0.004364 >] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver[976.977783 < 0.006653 >] ~~~~~~~~~~~~~~~~~~~~~0!!!!!!!!!!!~~~~~~~~~`[976.983093 < 0.005310 >] ~~~~~~~~~~~~~~~~~~~~~1!!!!!!!!!!!~~~~~~~~~`[976.988555 < 0.005462 >] ehci-omap ehci-omap.0: OMAP-EHCI Host Controller[976.994445 < 0.005890 >] ehci-omap ehci-omap.0: new USB bus registered, assigned bus number 1[977.002136 < 0.007691 >] ehci-omap ehci-omap.0: irq 77, io mem 0x48064800[977.016937 < 0.014801 >] ehci-omap ehci-omap.0: USB 2.0 started, EHCI 1.00[977.023925 < 0.006988 >] hub 1-0:1.0: USB hub found[977.027801 < 0.003876 >] hub 1-0:1.0: 3 ports detected[977.056243 < 0.028442 >] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver[977.062957 < 0.006714 >] usbcore: registered new interface driver hwa-hc[977.069000 < 0.006043 >] usbcore: registered new interface driver wusb-cbaf[977.074920 < 0.005920 >] Initializing USB Mass Storage driver...[977.080230 < 0.005310 >] usbcore: registered new interface driver usb-storage[977.086273 < 0.006043 >] USB Mass Storage support registered.[977.091033 < 0.004760 >] g_ether gadget: using random self ethernet address[977.096954 < 0.005921 >] g_ether gadget: using random host ethernet address[977.103607 < 0.006653 >] usb0: MAC 2a:eb:77:58:8e:fb[977.107482 < 0.003875 >] usb0: HOST MAC 8e:c8:d7:06:a7:9f[977.111907 < 0.004425 >] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008[977.118591 < 0.006684 >] g_ether gadget: g_ether ready[977.122650 < 0.004059 >] musb_hdrc musb_hdrc: MUSB HDRC host driver[977.127929 < 0.005279 >] musb_hdrc musb_hdrc: new USB bus registered, assigned bus number 2[977.136474 < 0.008545 >] hub 2-0:1.0: USB hub found[977.140289 < 0.003815 >] hub 2-0:1.0: 1 port detected[977.145568 < 0.005279 >] mice: PS/2 mouse device common for all mice[977.151184 < 0.005616 >] tsc2003 init [977.153900 < 0.002716 >] tsc2003 probe[977.156585 < 0.002685 >] mux: Setting signal mcspi1_cs2.gpio176 0x0114 -> 0x011c[977.156616 < 0.000031 >] tsc2003 begin [977.159454 < 0.002838 >] GPIO176 irqqq :336[977.162963 < 0.003509 >] input: tsc2003 as /class/input/input0[977.212280 < 0.049317 >] tsc2003 x:-5 y:-5 z:-5 bate:-5[977.419555 < 0.207275 >] rtc-s35390a 1-0030: error resetting chip[977.426361 < 0.006806 >] rtc-s35390a: probe of 1-0030 failed with error -5[977.432525 < 0.006164 >] Linux video capture interface: v2.00[977.437622 < 0.005097 >] vpfe_init[977.440124 < 0.002502 >] vpfe-capture vpfe-capture: v4l2 device registered[977.446350 < 0.006226 >] vpfe-capture vpfe-capture: video device registered[977.452911 < 0.006561 >] tvp514x 3-005c: tvp514x 3-005c decoder driver registered !![977.459655 < 0.006744 >] vpfe-capture vpfe-capture: v4l2 sub device tvp5146 registered[977.466827 < 0.007172 >] vpfe_register_ccdc_device: DM6446 CCDC[977.471832 < 0.005005 >] DM6446 CCDC is registered with vpfe.[977.477508 < 0.005676 >] OMAP Watchdog Timer Rev 0x31: initial timeout 60 sec[977.484954 < 0.007446 >] mmci-omap-hs mmci-omap-hs.1: err -16 configuring card detect[977.493164 < 0.008210 >] usbcore: registered new interface driver usbhid[977.498840 < 0.005676 >] usbhid: USB HID core driver[977.503112 < 0.004272 >] Advanced Linux Sound Architecture Driver Version 1.0.21.[977.512542 < 0.009430 >] No device for DAI AD73311[977.516479 < 0.003937 >] Asahi Kasei AK4104 ALSA SoC Codec Driver[977.521820 < 0.005341 >] No device for DAI AK4535[977.526000 < 0.004180 >] Cirrus Logic CS4270 ALSA SoC Codec Driver[977.531311 < 0.005311 >] No device for DAI PCM3008 HiFi[977.536804 < 0.005493 >] No device for DAI SSM2602[977.540588 < 0.003784 >] No device for DAI tlv320aic23[977.657623 < 0.117035 >] mmc0: new high speed SD card at address 6919[977.663635 < 0.006012 >] mmcblk0: mmc0:6919 SD02G 1.83 GiB [977.668487 < 0.004852 >] mmcblk0: p1 p2[977.993530 < 0.325043 >] No device for DAI tlv320aic3x[977.998107 < 0.004577 >] No device for DAI UDA134X[978.002105 < 0.003998 >] No device for DAI WM8510 HiFi[978.007354 < 0.005249 >] No device for DAI WM8728[978.011505 < 0.004151 >] No device for DAI WM8750[978.016510 < 0.005005 >] No device for DAI WM8971[978.021636 < 0.005126 >] No device for DAI WM8990 ADC/DAC Primary[978.027679 < 0.006043 >] No device for DAI omap-mcbsp-dai-0[978.032135 < 0.004456 >] No device for DAI omap-mcbsp-dai-1[978.036712 < 0.004577 >] No device for DAI omap-mcbsp-dai-2[978.041229 < 0.004517 >] No device for DAI omap-mcbsp-dai-3[978.045684 < 0.004455 >] No device for DAI omap-mcbsp-dai-4[978.050170 < 0.004486 >] OMAP3517 / AM3517 EVM SoC init[978.056335 < 0.006165 >] asoc: tlv320aic3x <-> omap-mcbsp-dai-0 mapping ok[978.063140 < 0.006805 >] Failed to add route IN1L->LINE1L[978.067504 < 0.004364 >] dapm: tlv320aic3x: configuring unknown pin Line Out[978.080322 < 0.012818 >] ALSA device list:[978.083312 < 0.002990 >] #0: am3517evm (tlv320aic3x)[978.087646 < 0.004334 >] TCP cubic registered[978.090911 < 0.003265 >] NET: Registered protocol family 17[978.095458 < 0.004547 >] NET: Registered protocol family 15[978.099975 < 0.004517 >] can: controller area network core (rev 20090105 abi 8)[978.106353 < 0.006378 >] NET: Registered protocol family 29[978.110931 < 0.004578 >] can: raw protocol (rev 20090105)[978.115203 < 0.004272 >] can: broadcast manager protocol (rev 20090105 t)[978.121582 < 0.006379 >] Power Management for TI OMAP3.[978.125976 < 0.004394 >] Disabling unused clock "emac_fck"[978.125976 < 0.000000 >] Disabling unused clock "emac_ick"[978.126007 < 0.000031 >] Disabling unused clock "mcbsp_fck"[978.126037 < 0.000030 >] Disabling unused clock "mcbsp_fck"[978.126037 < 0.000000 >] Disabling unused clock "mcbsp_fck"[978.126068 < 0.000031 >] Disabling unused clock "mcbsp_ick"[978.126098 < 0.000030 >] Disabling unused clock "mcbsp_ick"[978.126098 < 0.000000 >] Disabling unused clock "mcbsp_ick"[978.126129 < 0.000031 >] Disabling unused clock "gpt2_ick"[978.126129 < 0.000000 >] Disabling unused clock "gpt3_ick"[978.126159 < 0.000030 >] Disabling unused clock "gpt4_ick"[978.126159 < 0.000000 >] Disabling unused clock "gpt5_ick"[978.126190 < 0.000031 >] Disabling unused clock "gpt6_ick"[978.126220 < 0.000030 >] Disabling unused clock "gpt7_ick"[978.126220 < 0.000000 >] Disabling unused clock "gpt8_ick"[978.126251 < 0.000031 >] Disabling unused clock "gpt9_ick"[978.126251 < 0.000000 >] Disabling unused clock "wdt3_ick"[978.126281 < 0.000030 >] Disabling unused clock "wdt3_fck"[978.126342 < 0.000061 >] Disabling unused clock "gpio2_dbck"[978.126373 < 0.000031 >] Disabling unused clock "gpio3_dbck"[978.126373 < 0.000000 >] Disabling unused clock "gpio4_dbck"[978.126403 < 0.000030 >] Disabling unused clock "gpio5_dbck"[978.126403 < 0.000000 >] Disabling unused clock "gpio6_dbck"[978.126434 < 0.000031 >] Disabling unused clock "gpt9_fck"[978.126464 < 0.000030 >] Disabling unused clock "gpt8_fck"[978.126464 < 0.000000 >] Disabling unused clock "gpt7_fck"[978.126495 < 0.000031 >] Disabling unused clock "gpt6_fck"[978.126495 < 0.000000 >] Disabling unused clock "gpt5_fck"[978.126525 < 0.000030 >] Disabling unused clock "gpt4_fck"[978.126525 < 0.000000 >] Disabling unused clock "gpt3_fck"[978.126556 < 0.000031 >] Disabling unused clock "gpt2_fck"[978.126556 < 0.000000 >] Disabling unused clock "gpt12_ick"[978.126586 < 0.000030 >] Disabling unused clock "wdt1_ick"[978.126617 < 0.000031 >] Disabling unused clock "gpio1_dbck"[978.126617 < 0.000000 >] Disabling unused clock "mcbsp_ick"[978.126647 < 0.000030 >] Disabling unused clock "mcbsp_ick"[978.126678 < 0.000031 >] Disabling unused clock "gpt10_ick"[978.126678 < 0.000000 >] Disabling unused clock "gpt11_ick"[978.126708 < 0.000030 >] Disabling unused clock "mcspi_ick"[978.126708 < 0.000000 >] Disabling unused clock "mcspi_ick"[978.126739 < 0.000031 >] Disabling unused clock "mcspi_ick"[978.126770 < 0.000031 >] Disabling unused clock "mcspi_ick"[978.126770 < 0.000000 >] Disabling unused clock "hdq_ick"[978.126800 < 0.000030 >] Disabling unused clock "hdq_fck"[978.126800 < 0.000000 >] Disabling unused clock "mcspi_fck"[978.126831 < 0.000031 >] Disabling unused clock "mcspi_fck"[978.126831 < 0.000000 >] Disabling unused clock "mcspi_fck"[978.126861 < 0.000030 >] Disabling unused clock "mcspi_fck"[978.126861 < 0.000000 >] Disabling unused clock "mcbsp_fck"[978.126892 < 0.000031 >] Disabling unused clock "mcbsp_fck"[978.126922 < 0.000030 >] Disabling unused clock "gpt11_fck"[978.126922 < 0.000000 >] Disabling unused clock "gpt10_fck"[978.126953 < 0.000031 >] Disabling unused clock "dpll4_m6x2_ck"[978.126983 < 0.000030 >] Disabling unused clock "dpll4_m5x2_ck"[978.126983 < 0.000000 >] Disabling unused clock "dpll3_m3x2_ck"[978.127014 < 0.000031 >] Disabling unused clock "sys_clkout1"[978.127593 < 0.000579 >] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 1[978.151489 < 0.023896 >] Console: switching to colour frame buffer device 100x30[978.239227 < 0.087738 >] omapdss DPI: Could not find exact pixel clock. Requested 35087 kHz, got 35086 kHz[978.250549 < 0.011322 >] davinci_emac_probe: using random MAC addr: 4e:14:cb:c5:2f:c9[978.260040 < 0.009491 >] emac-mii: probed[978.263214 < 0.003174 >] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)[978.269744 < 0.006530 >] omapdss DPI error: display already enabled[978.274932 < 0.005188 >] omap_vout omap_vout: 'lcd' Display already enabled[978.280822 < 0.005890 >] omapdss DPI error: display already enabled[978.286010 < 0.005188 >] omap_vout omap_vout: 'lcd' Display already enabled[978.291931 < 0.005921 >] omap_vout omap_vout: Buffer Size = 3686400[978.298675 < 0.006744 >] omap_vout omap_vout: : registered and initialized video device 1[978.305816 < 0.007141 >] omap_vout omap_vout: Buffer Size = 3686400[978.312561 < 0.006745 >] omap_vout omap_vout: : registered and initialized video device 2[978.823852 < 0.511291 >] eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:00, id=221613)[979.837310 < 1.013458 >] Sending DHCP and RARP requests ...... timed out![1054.362609 < 74.525299 >] IP-Config: Reopening network devices...[1054.869781 < 0.507172 >] eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:00, id=221613)[1055.884124 < 1.014343 >] Sending DHCP and RARP requests ...... timed out![1131.878112 < 75.993988 >] IP-Config: Auto-configuration of network failed.[1134.965942 < 3.087830 >] Empty flash at 0x00c5f3e4 ends at 0x00c5f800[1137.241119 < 2.275177 >] Empty flash at 0x1ae5d108 ends at 0x1ae5d800[1137.671966 < 0.430847 >] VFS: Mounted root (jffs2 filesystem) on device 31:4.[1137.678161 < 0.006195 >] Freeing init memory: 168K[1139.638549 < 1.960388 >] JFFS2 notice: (596) check_node_data: wrong data CRC in data node at 0x1ae5cfac: read 0x2efd2e64, calculated 0x5fa9cf47.[1143.775421 < 4.136872 >] yaffs: dev is 187695104 name is "mmcblk0"[1143.780517 < 0.005096 >] yaffs: passed flags ""[1143.783996 < 0.003479 >] yaffs: Attempting MTD mount on 179.0, "mmcblk0"[1143.938781 < 0.154785 >] yaffs: dev is 187695104 name is "mmcblk0"[1143.944000 < 0.005219 >] yaffs: passed flags ""[1143.947448 < 0.003448 >] yaffs: Attempting MTD mount on 179.0, "mmcblk0"[1145.161468 < 1.214020 >] EXT2-fs (mmcblk0p2): warning: mounting ext3 filesystem as ext2[1145.168579 < 0.007111 >] EXT2-fs (mmcblk0p2): warning: maximal mount count reached, running e2fsck is recommended首先我们发现最浪费时间的在试图动态获得网络IP那一块。然后第二多的就是各种文件系统初始化花费的时间。作为一款Cortex-A8产品,TI的AM3517在基本的代码运行方面可以说表现得非常出色。不需要做太多的优化。那前面提到的IP获取那一块,及文件系统方面问题怎么解决呢。网络,请在内核配置里关掉相关的动态获取IP的选择,对于嵌入式产品通常这是用不到的,而这里的慢,也正是因为实质上没有提供DHCP服务器。当然,如果能进一步优化一下网络PHY那一块的代码,使得驱动只汇报有一个PHY, 也会快不少。eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:00, id=221613) (这是合众达优化前检测PHY的地址,导致系统后面按照32个PHY去做DHCP请求,显然会是超慢的)eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=1:00, id=221613 (这是合众达优化后的情况,系统正确的识别了只有一个PHY,这样后面的检测自然会快很多)文件系统,只保留你用得到的,其它的都关掉吧。比如上面的同时启用Flash的JFFS2和YAFFS2, 实际的产品中是不可能同时使用两种文件系统的,除非板子上即用了Nor Flash又使用了NAND Flash这是内核方面的问题。后面我们将继续讲述,UBoot加载内核时发生的情况。
-
对于只使用串口的HMI产品而言,你可以将网络接口等对应的引脚全部配置成串口。
这样你只需要一颗CPU的钱,就买到了一颗CPU外加四路以上的串口扩展。
-
“你就吹吧,AM18XX怎么会有CPLD呢?不懂不要在这里装懂!”质疑的声浪一浪高过一浪。
且听我说,我这个“CPLD”不是带引号的吗?
也就是我并没有说它是真正的CPLD,只是它具备了准CPLD的功能。
注意,是准CPLD。
那CPLD是什么,引自百度百科上的话说“CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路”。翻译一下就是用CPLD的引脚,可以根据你的需要灵活的配置出你想要的功能。你可以通过它配置出一个串口来,也可以配置出一个CAN总线来。
这样的功能在AM18xx上有吗?
当然是有的,通过AM18xx的PRU模块,可以将它管理到的而你别的常规没直接用到的引脚配置成任意你想要的功能。比如说串口或是CAN总线。所不同的是CPLD时,你用的是VHDL,而PRU时你用的是TI提供的PRU汇编(TI提供了丰富的例程)。因此我们可以看着PRU就是AM18xx的片上 “CPLD”。
-
说到这,可能有人会问,“那你怎么着,还有什么本事省下这个钱不成”。
如“全球通,我能”,我的回答是“Sitara,我能”。
正是Sitara,给我们插上了一个无尽想象力的翅膀。
因为Sitara的AM18xx处理器家庭,自带片上“CPLD”功能。
-
没办法,看来不说清楚是不行了。
好,好偶就掰一掰,再抖落抖落。
一个一个来说吧:
先说用串口的,接一个两个串口的,咱姑且不论,因而这是最基本的要求,如果连这个标准都达不到,那咱也没啥好说道的。当你所管的东西多了以后,需要七八个串口,那是非常正常的。这时您,作为产品的项目经理或是决策人或是影响人,你将如何选择呢,是选择一个任意的CPU再配上串口扩展芯片来做呢,还是搞台电脑再接一个所谓的多串口卡呢? 电脑的成本,不用我说,您最清楚了。至于多串口卡,几年前我买过一个8串口卡,当时是2400多。那CPU+串口扩展芯片呢,通常一个CPU本身带两三个串口,要就是说要额外扩展的串口数量是4个以上。这样的一个扩展器件,可是不便宜,价格甚至超过了许多CPU。比如说TI 的一个4口串口扩展芯片是TL16C754B。具体的价格您可以去TI查一下。
-
兄弟们,姐妹们,你们可是真的冤杀我了。
第一 我不是TI的员工,我只是喜欢Sitara这个平台,才当了TI这个版托。
第二 并不是因为我是个托,才在这里大放厥词,在这里胡吹八吹
听,质疑声仍不决于耳“那你说说看,怎么就Sitara最好了?”
看来今天不说清楚,我是下不了这个台了。
-
在这里我可以非常负责任地讲
使用串口时,最佳人选,Sitara当之无愧。
使用网口时,最佳人选,Sitara当仁不让。
有的人可能要说,David,你别在这吹牛了,你是TI的人你当然这样说了。
-
为什么我要说在CPU中选择呢?
1. 如果一颗CPU能解决的,说明成本最低
2. 如果一颗CPU能解决的,说明稳定性最好
3. 如果一颗CPU能解决的,说明参考代码最全
-
通讯接口 如果是串口的话,可以说是数量越多越好。
那么谁是最多串口的器件。(请在CPU内选择)
如果是网口的话。 那么可以说是带宽越高越好。
那么谁拥有最高的网络带宽。(请在CPU中选择)
-
显示组件 说穿了就是显示器,当然这个显示器可以是CRT的,可以是等离子的,但最好的还是液晶的。至于为嘛还是液晶的好,众看官自己想去
-
让我们回想一下,HMI设备是要怎么用的。
一些设备需要通过HMI设备来监视系统状态,并提供给用户一个交互的能力。
那么从这个来看,就扯出HMI设备需要有:
* 显示组件 只有这样才能显示要监控的系统的状态,并提供用户相关的软件界面
* 输入组件 可以是鼠标键盘,可以是一些按钮,然而最方便的还当属于触摸屏
* 通讯接口 目前常用的有串口,网口,以及CAN等工业总线
-
组态软件的功能
组态软件指一些数据采集与过程控制的专用软件,它们是在自动控制系统监控层一级的软件平台和开发环境,能以灵活多样的组态方式(而不是编程方式)提供良好的用户开发界面和简捷的使用方法,它解决了控制系统通用性问题。其预设置的各种软件模块可以非常容易地实现和完成监控层的各项功能,并能同时支持各种硬件厂家的计算机和I/O产品,与高可靠的工控计算机和网络系统结合,可向控制层和管理层提供软硬件的全部接口,进行系统集成。 组态软件通常有以下几方面的功能: (1)强大的界面显示组态功能。目前,工控组态软件大都运行于Windows环境下,充分利用Windows的图形功能完善界面美观的特点,可视化的m风格界面、丰富的工具栏,操作人员可以直接进人开发状态,节省时间。丰富的图形控仵和工况图库,既提供所需的组件,又是界面制作向导。提供给用户丰富的作图工具,可随心所欲地绘制出各种工业界面,并可任意编辑,从而将开发人员从繁重的界面设计中解放出来,丰富的动画连接方式,如隐含、闪烁、移动等等,使界面生动、直观。 (2)良好的开放性。社会化的大生产,使得系统构成的全部软硬仵不可能出自一家公司的产品,“异构”是当今控制系统的主要特点之一。开放性是指组态软件能与多种通信协议互联,支持多种硬件设备。开放性是衡量一个组态软件好坏的重要指标。 组态软件向下应能与低层的数据采集设备通信,向上能与管理层通信,实现上位机与下位机的双向通信。 (3) 丰富的功能模块。提供丰富的控潲功能库,满足用户的测控要求和现场荽求。利用各种功能模块,完成实时监控 产生功能报表 业示历史曲线、实时曲线、提供报警等功能,使系统具有良好的人机界面,易于操作,系统既叫适用于单机集中式控制、DCS分布式控制,也可以是带远程遇信能力的远程测控系统. (4)强大的数据库。配有实时数据库,可存储各种数据,如模拟量、离散量、字符型等,实现与外部设备的数据交换。 (5)可编程的命令语言。有可编程的命令语言,使用户可根据自己的需要编撰程序,增强图形界面 (6)周密的系统安全防范,对不同的操作者,赋予不同的操作权限,保证整个系统的安全可靠运行。 (7)仿真功能.提供强大的仿真功能使系统并行设计,从而缩短开发周期。
-
组态软件特点
随着工业自动化水平的迅速提高,计算机在工业领域的广泛应用,人们对工业自动化的要求越来越高,种类繁多的控制设备和过程监控装置在工业领域的应用,使得传统的工业控制软件已无法满足用户的各种需求。在开发传统的工业控制软件时,当工业被控对象一旦有变动,就必须修改其控制系统的源程序,导致其开发周期长;已开发成功的工控软件又由于每个控制项目的不同而使其重复使用率很低,导致它的价格非常昂贵;在修改工控软件的源程序时,倘若原来的编程人员因工作变动而离去时,则必须同其他人员或新手进行源程序的修改,因而更是相当困难。通用工业自动化组态软件的出现为解决上述实际工程问题提供了一种崭新的方法,因为它能够很好地解决传统工业控制软件存在的种种问题,使用户能根据自己的控制对象和控制目的的任意组态,完成最终的自动化控制工程。
组态(Configuration)为模块化任意组合。通用组态软件主要特点:
(1)延续性和可扩充性。用通用组态软件开发的应用程序,当现场(包括硬件设备或系统结构)或用户需求发生改变时,不需作很多修改而方便地完成软件的更新和升级;
(2)封装性(易学易用),通用组态软件所能完成的功能都用一种方便用户使用的方法包装起来,对于用户,不需掌握太多的编程语言技术(甚至不需要编程技术),就能很好地完成一个复杂工程所要求的所有功能;
(3)通用性,每个用户根据工程实际情况,利用通用组态软件提供的底层设备(PLC、智能仪表、智能模块、板卡、变频器等)的I/O Driver、开放式的数据库和画面制作工具,就能完成一个具有动画效果、实时数据处理、历史数据和曲线并存、具有多媒体功能和网络功能的工程,不受行业限制。
-
国内品牌组态软件
1.世纪星:由北京世纪长秋科技有限公司开发。产品自1999年开始销售。
2.三维力控:由北京三维力控科技有限公司开发,核心软件产品初创于1992年。
3.组态王KingView:由北京亚控科技发展有限公司开发,该公司成立于1997年,目前在国产软件市场中占据着一定地位。
4.紫金桥Realinfo:由紫金桥软件技术有限公司开发,该公司是由中石油大庆石化总厂出资成立。
5.MCGS:由北京昆仑通态自动化软件科技有限公司开发,市场上主要是搭配硬件销售。
6.还有Controx(开物),易控等
-
组态软件是有专业性的。一种组态软件只能适合某种领域的应用。组态的概念最早出现在工业计算机控制中。如DCS(集散控制系统)组态,PLC(可编程控制器)梯形图组态。人机界面生成软件就叫工控组态软件。在其他行业也有组态的概念,如AutoCAD,PhotoShop等。不同之处在于,工业控制中形成的组态结果是用在实时监控的。从表面上看,组态工具的运行程序就是执行自己特定的任务。 工控组态软件也提供了编程手段,一般都是内置编译系统,提供类BASIC语言,有的支持VB,现在有的组态软件甚至支持C#高级语言。
组态软件大都支持各种主流工控设备和标准通信协议,并且通常应提供分布式数据管理和网络功能。对应于原有的HMI(人机接口软件,Human Machine Interface)的概念,组态软件还是一个使用户能快速建立自己的HMI的软件工具或开发环境。在组态软件出现之前,工控领域的用户通过手工或委托第三方编写HMI应用,开发时间长,效率低,可靠性差;或者购买专用的工控系统,通常是封闭的系统,选择余地小,往往不能满足需求,很难与外界进行数据交互,升级和增加功能都受到严重的限制。组态软件的出现使用户可以利用组态软件的功能,构建一套最适合自己的应用系统。随着它的快速发展,实时数据库、实时控制、SCADA、通讯及联网、开放数据接口、对I/O设备的广泛支持已经成为它的主要内容监控组态软件将会不断被赋予新的内容。
编辑本段
国外进口品牌组态软件
国外组态软件:
1、InTouch:Wonderware(万维公司) 是 Invensys plc“生产管理”部的一个运营单位,是全球工业自动化软件的领先供应商。
Wonderware的InTouch软件是最早进入我国的组态软件。在80年代末、90年代初,基于Windows3.1的InTouch软件曾让我们耳目一新,并且InTouch提供了丰富的图库。但是,早期的InTouch软件采用DDE方式与驱动程序通信,性能较差,最新的 InTouch7.0版已经完全基于32位的Windows平台,并且提供了OPC支持。
2、IFix:GE Fanuc 智能设备公司由美国通用电气公司(GE)和日本Fanuc公司合资组建,提供自动化硬件和软件解决方案,帮助用户降低成本,提高效率并增强其盈利能力。
Intellution公司以Fix组态软件起家,1995年被爱默生收购,现在是爱默生集团的全资子公司,Fix6.x软件提供工控人员熟悉的概念和操作界面,并提供完备的驱动程序(需单独购买)。上世纪90年代末,Intellution公司重新开发内核,并将重新开发新的产品系列命名为 iFiX。在iFiX中,Intellution提供了强大的组态功能,将FIX原有的Script语言改为VBA(Visual Basic For Application),并且在内部集成了微软的VBA开发环境。为了解决兼容问题,iFIX里面提供了程序叫FIX Desktop,可以直接在FIX Desktop中运行FIX程序。Intellution的产品与Microsoft的操作系统、网络进行了紧密的集成。Intellution也是 OPC(OLE for Process Control)组织的发起成员之一。iFiX的OPC组件和驱动程序同样需要单独购买。
2002年,GE Fanuc公司又从爱默生集团手中,将intellution公司收购。
2009年12月11日,通用电气公司(纽约证券交易所:GE)和FANUC公司宣布,两家公司完成了GE Fanuc自动化公司合资公司的解散协议。根据该协议,合资公司业务将按照其起初来源和比例各自归还给其母公司,该协议并使股东双方得以将重点放在其各自现有业务,谋求在其各自专长的核心业内的发展。目前,iFIX等原intellution公司产品均归GE智能平台(GE-IP).
3、Citech:悉雅特集团(Citect)是世界领先的提供工业自动化系统、设施自动化系统、实时智能信息和新一代 MES 的独立供应商。
CiT公司的Citech也是较早进入中国市场的产品。Citech具有简洁的操作方式,但其操作方式更多的是面向程序员,而不是工控用户。 Citech提供了类似C语言的脚本语言进行二次开发,但与iFix不同的是,Citech的脚本语言并非是面向对象的,而是类似于C语言,这无疑为用户进行二次开发增加了难度。
4、WinCC:西门子自动化与驱动集团(A&D)是西门子股份公司中最大的集团之一,是西门子工业领域的重要组成部分。
Siemens的WinCC也是一套完备的组态开发环境,Simens提供类C语言的脚本,包括一个调试环境。WinCC内嵌OPC支持,并可对分布式系统进行组态。但WinCC的结构较复杂,用户最好经过Siemens的培训以掌握WinCC的应用。
5、ASPEN-tech (艾斯苯公司)
InfoPlus.21
艾斯苯公司(AspenTechnology,Inc.)是一个为过程工业(包括化工、石化、炼油、造纸、电力、制药、半导体、日用化工、食品饮料等工业)提供企业优化软件及服务的领先供应商.
6、Movicon:是意大利自动化软件供应商PROGEA公司开发。该公司自1990年开始开发基于Windows平台的自动化监控软件,可在同一开发平台完成不同运行环境的需要。特色之处在于完全基于XML,又集成了VBA兼容的脚本语言及类似STEP-7指令表的软逻辑功能。
-
而在国际上
组态软件,又称组态监控软件系统软件。译自英文SCADA,即 Supervisory Control and Data Acquisition(数据采集与监视控制)。它是指一些数据采集与过程控制的专用软件。它们处在自动控制系统监控层一级的软件平台和开发环境,使用灵活的组态方式,为用户提供快速构建工业自动控制系统监控功能的、通用层次的软件工具。组态软件的应用领域很广,可以应用于电力系统、给水系统、石油、化工等领域的数据采集与监视控制以及过程控制等诸多领域。在电力系统以及电气化铁道上又称远动系统(RTU System,Remote Terminal Unit)。