Content
- DDR3 Memory
- Ethernet
- PCI Express
- USB
- SD card
- Display
- SATA
- I2C
- Touchscreen TSC2007
- Audio SGTL5000
- CPU Temperature
- CPU Frequency
- GPU Test
- Bonnie++ benchmark
- Wireless modem
- Wifi PCIE mini card Intel 4965AGN
- Add an UART port (USB to UART support)
- Check all the CPU clocks and frequencies
DDR3 Memory test
First check how much free memory you have# free total used free shared buffers Mem: 765964 28352 737612 0 0 -/+ buffers: 28352 737612 Swap: 0 0 0 #To run the memory test use as much free memory as you can. (In this example I use 10M for demonstration, just to run the test very quickly)
# memtester 10M memtester version 4.3.0 (32-bit) Copyright (C) 2001-2012 Charles Cazabon. Licensed under the GNU General Public License version 2 (only). pagesize is 4096 pagesizemask is 0xfffff000 want 10MB (10485760 bytes) got 10MB (10485760 bytes), trying mlock ...locked. Loop 1: Stuck Address : ok Random Value : ok Compare XOR : ok Compare SUB : ok Compare MUL : ok Compare DIV : ok Compare OR : ok Compare AND : ok Sequential Increment: ok Solid Bits : ok Block Sequential : ok Checkerboard : ok Bit Spread : ok Bit Flip : ok Walking Ones : ok Walking Zeroes : ok 8-bit Writes : ok 16-bit Writes : ok
Boot your board from a RAM filesystem
Rex U-Boot > tftp 0x10800000 uImage PHY indentify @ 0x3 = 0x00221611 FEC: Link is Up 796d Using FEC0 device TFTP from server 192.168.0.86; our IP address is 192.168.0.150 Filename 'uImage'. Load address: 0x10800000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# #### done Bytes transferred = 3868164 (3b0604 hex) Rex U-Boot > tftp 0x11000000 uramdisk.img FEC: Link is Up 796d Using FEC0 device TFTP from server 192.168.0.86; our IP address is 192.168.0.150 Filename 'uramdisk.img'. Load address: 0x11000000 Loading: ################################################################# ######################### done Bytes transferred = 1309205 (13fa15 hex) Rex U-Boot > bootm 0x10800000 0x11000000
Ethernet test
A simple ping test. You can increase the size of the packet press -s switch# ping -s 1000 192.168.0.86 PING 192.168.0.86 (192.168.0.86): 1000 data bytes 1008 bytes from 192.168.0.86: seq=0 ttl=64 time=1.988 ms 1008 bytes from 192.168.0.86: seq=1 ttl=64 time=0.479 ms 1008 bytes from 192.168.0.86: seq=2 ttl=64 time=0.451 ms 1008 bytes from 192.168.0.86: seq=3 ttl=64 time=0.465 ms --- 192.168.0.86 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.451/0.845/1.988 ms #
PCI Express (a PCIE Ethernet card was used for this test)
Enable PCI Express for iMX6make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi- menuconfig Add a star to: make menuconfig -> System Type -> Freescale MXC Implementations -> PCI Express support Add a star to: make menuconfig -> Bus support -> Message Signaled Interrupts (MSI and MSI-X) Add a star to: make menuconfig -> Bus support -> PCI Express SupportAdd support for Realtek 8169 PCIE ethernet card
Add a star to: make menuconfig -> Device Drivers -> Network Device support -> Ethernet (1000 Mbit) Add a star to: make menuconfig -> Device Drivers -> Network Device support -> Ethernet (1000 Mbit) -> Realtek 8169 gigabit ethernet supportDisable the on board Ethernet (FEC)
remove the star from: make menuconfig -> Device Drivers -> Network Device support -> Ethernet (10 or 100Mb)Install iperf
#apt-get install iperfDisconnect the onboard ethernet and run:
//start iperf server, on a local computer fedevel@ubuntu:~$ iperf -s //start iper client on the iMX6 Rex board # iperf -c 192.168.0.86 -t 60 -i 10 ------------------------------------------------------------ Client connecting to 192.168.0.86, TCP port 5001 TCP window size: 16.0 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.0.75 port 57541 connected with 192.168.0.86 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 542 MBytes 455 Mbits/sec [ 3] 10.0-20.0 sec 544 MBytes 456 Mbits/sec [ 3] 20.0-30.0 sec 538 MBytes 452 Mbits/sec [ 3] 30.0-40.0 sec 617 MBytes 518 Mbits/sec [ 3] 40.0-50.0 sec 779 MBytes 654 Mbits/sec [ 3] 50.0-60.0 sec 774 MBytes 649 Mbits/sec [ 3] 0.0-60.0 sec 3.71 GBytes 530 Mbits/sec root@linaro-alip:~#Now the other direction
//start iperf server on the iMX6 Rex board # iperf -s //start iperf client on a local computer iperf -c 192.168.0.75 -t 60 -i 10 ------------------------------------------------------------ Client connecting to 192.168.0.75, TCP port 5001 TCP window size: 16.0 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.0.86 port 56105 connected with 192.168.0.75 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 1.05 GBytes 901 Mbits/sec [ 3] 10.0-20.0 sec 1.06 GBytes 910 Mbits/sec [ 3] 20.0-30.0 sec 1.06 GBytes 910 Mbits/sec [ 3] 30.0-40.0 sec 1.06 GBytes 910 Mbits/sec [ 3] 40.0-50.0 sec 1.06 GBytes 910 Mbits/sec [ 3] 50.0-60.0 sec 1.06 GBytes 909 Mbits/sec [ 3] 0.0-60.0 sec 6.35 GBytes 908 Mbits/sec fedevel@ubuntu:~$
USB
Plug in a USB memory stick, you will see a message like this (possible use dmesg command to see how your USB is detected).# usb 1-1.1: device v17ef p3818 is not supported sd 1:0:0:0: [sdb] No Caching mode page present sd 1:0:0:0: [sdb] Assuming drive cache: write through sd 1:0:0:0: [sdb] No Caching mode page present sd 1:0:0:0: [sdb] Assuming drive cache: write through sd 1:0:0:0: [sdb] No Caching mode page present sd 1:0:0:0: [sdb] Assuming drive cache: write through #Mount the USB (in this example the USB is formatted as FAT)
# mount /dev/sdb1 /media # ls -la /media total 118084 drwxr-xr-x 4 root root 8192 Jan 1 1970 . drwxr-xr-x 22 root linaro 4096 Dec 20 09:30 .. -rwxr-xr-x 1 root root 120886176 Dec 22 15:11 78.avi drwxr-xr-x 8 root root 8192 Oct 10 16:48 Pictures processed drwxr-xr-x 2 root root 8192 Oct 10 16:44 iMX6 Rex Moduel Layout videos #Now, you can copy a video to /media and play it. This will perform a simple USB test.
SD
Plug the SD card and find out where the card is mapped. After typing dmesg at you will see something like this:# dmesg | tail mmc0: new high speed SD card at address aaaa mmcblk1: mmc0:aaaa SU02G 1.84 GiB mmcblk1: p1Your card is mapped in /dev/mmcblk1. Create a new partition on this SD card:
# fdisk /dev/mmcblk1 Command (m for help): p Disk /dev/mmcblk0: 1977 MB, 1977614336 bytes 4 heads, 16 sectors/track, 60352 cylinders, total 3862528 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x91fc0d77 Device Boot Start End Blocks Id System Command (m for help): d Selected partition 1 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): Using default value 1 First sector (2048-3862527, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-3862527, default 3862527): Using default value 3862527 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. #Format your SD card - you created partition 1 on the card which is located in /dev/mmcblk1 (or wherever the dmesg above said). The partition is then mapped in register /dev/mmcblk1p1:
# mkfs.ext3 /dev/mmcblk1p1 mke2fs 1.42.5 (29-Jul-2012) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 120720 inodes, 482815 blocks 24140 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=494927872 15 block groups 32768 blocks per group, 32768 fragments per group 8048 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done #Mount your SD card
# mount /dev/mmcblk1p1 /media/ root@linaro-alip:~# ls -la /media/ total 24 drwxr-xr-x 3 root root 4096 Dec 28 15:04 . drwxr-xr-x 22 root linaro 4096 Dec 20 09:30 .. drwx------ 2 root root 16384 Dec 28 15:04 lost+found #Now, you can copy a video to /media and play it. This will perform a simple SD test.
Preparing SD card for a filesystem
These steps described creating a new filesystem SD card on the iMX6 Rex board. Check if the link is fit on the jumper JP3. If not fit them and reset the board. Download the filesystem, the default kernel and the wifi and modem support version. Be sure, you have the latest files. Copy all these files e.g. to the USB stick. Plug the USB, insert SD card to the hinged card holder (J39). Folow these steps to prepare the SD card first. After you plug the usb find out where the USB is mapped. At the end of the list you will see sometihing like this:# dmesg | tail sd 1:0:0:0: [sda] Write Protect is off sd 1:0:0:0: [sda] Mode Sense: 43 00 00 00 sd 1:0:0:0: [sda] No Caching mode page present sd 1:0:0:0: [sda] Assuming drive cache: write through sd 1:0:0:0: [sda] No Caching mode page present sd 1:0:0:0: [sda] Assuming drive cache: write through sda: sda1 sd 1:0:0:0: [sda] No Caching mode page present sd 1:0:0:0: [sda] Assuming drive cache: write through sd 1:0:0:0: [sda] Attached SCSI removable diskYour USB stick is mapped in /dev/sda1 (in this case). Mount the USB:
# mkdir /media/usbdisk # mount /dev/sda1 /media/usbdiskMount the SD card:
# mkdir /media/sdcard # mount /dev/mmcblk1p1 /media/sdcardUnpack the filesystem:
# cd /media/sdcard # tar -pxvzf /media/usbdisk/imx6rex-xubuntu-13-04-production-04-AUG-2014.tarCopy kernel to the SD card:
# cp -prv /media/usbdisk/imx6rex-uImage-wifi-and-modem-no-fec-11-MAR-2014 uImage-wifi-and-modem-no-fec # cp -prv /media/usbdisk/imx6rex-uImage-gpu-en-fec-fix-02-MAY-2014 uImageUnmout the USB stick and the SD device:
# umount /media/usbdisk # cd ~ # umount /media/sdcard
Listing SD card files in u-boot
You can check the content of the SD card in the u-boot with the command> mmc dev 1; ext2ls mmc 1
Setup display outputs
To reorder your display outputs edit linux source code. Find this function at linux/arch/arm/mach-mx6/board-mx6q_sabresd.cstatic struct ipuv3_fb_platform_data sabresd_fb_data[] = { { /*fb0*/ /* .disp_dev = "ldb", .interface_pix_fmt = IPU_PIX_FMT_RGB666, .mode_str = "LDB-XGA", .default_bpp = 16, .int_clk = false, .late_init = false, }, { .disp_dev = "ldb", .interface_pix_fmt = IPU_PIX_FMT_RGB666, .mode_str = "LDB-XGA", .default_bpp = 16, .int_clk = false, }, { .disp_dev = "lcd", .interface_pix_fmt = IPU_PIX_FMT_RGB565, .mode_str = "CLAA-WVGA", .default_bpp = 16, .int_clk = false, .late_init = false, }, { .disp_dev = "ldb", .interface_pix_fmt = IPU_PIX_FMT_RGB666, .mode_str = "LDB-VGA", .default_bpp = 16, .int_clk = false, .late_init = false, },*/ .disp_dev = "ldb", .interface_pix_fmt = IPU_PIX_FMT_RGB666, .mode_str = "LDB-XGA", .default_bpp = 32, .int_clk = false, }, { .disp_dev = "ldb", .interface_pix_fmt = IPU_PIX_FMT_RGB666, .mode_str = "LDB-XGA", .default_bpp = 16, .int_clk = false, }, { .disp_dev = "hdmi", .interface_pix_fmt = IPU_PIX_FMT_RGB24, .mode_str = "1920x1080M@60", .default_bpp = 32, .int_clk = false, }, { .disp_dev = "lcd", .interface_pix_fmt = IPU_PIX_FMT_RGB565, .mode_str = "CLAA-WVGA", .default_bpp = 16, .int_clk = false, }, };
HDMI
To setup the HDMI monitor as a default video output (e.g. x window will be shown here) use following commands. Note: If you use Linaro filesystem, use the default kernel (both was shipped on the SD card with your board).> setenv bootargs 'console=ttymxc0,115200' > setenv bootcmd_mmc 'run bootargs_mmc ; mmc dev 1; ext2load mmc 1 0x10800000 uImage 3850796; bootm 0x10800000' > setenv bootargs_mmc 'setenv bootargs ${bootargs} ip=192.168.10.86:::255.255.255.0 root=/dev/mmcblk0p1 rootwait video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB666 vmalloc=400M fbmem=28M fbcon=28M' > setenv bootcmd 'ping 192.168.10.1; run bootcmd_mmc'Setup the HDMI monitor as primary when the filesystem is downloaded from network server:
setenv bootargs_nfs 'setenv bootargs ${bootargs} root=/dev/nfs rootdelay=4 ip=192.168.0.85:::255.255.255.0 nfsroot=${serverip}:${nfsroot},v3,tcp video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24 vmalloc=400M fbmem=28M fbcon=28M'Play a video on HDMI monitor. (Note: At the moment there is no audio support on our board, so I switch audio off)
# mplayer -vo fbdev2 -nosound dfs.avi MPlayer2 UNKNOWN (C) 2000-2012 MPlayer Team mplayer: could not connect to socket mplayer: No such file or directory Failed to open LIRC support. You will not be able to use your remote control. Playing dfs.avi. Detected file format: AVI format (libavformat) [lavf] stream 0: video (msvideo1), -vid 0, Image11.avi Video #1 VIDEO: [CRAM] 320x240 16bpp 15.000 fps 0.0 kbps ( 0.0 kbyte/s) Load subtitles in . Opening video filter: [scale] [ass] auto-open ========================================================================== Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family Asking decoder to use 4 threads if supported. Selected video codec: [ffvideo1] vfm: ffmpeg (FFmpeg Microsoft Video 1) ========================================================================== Audio: no sound Starting playback... Could not find matching colorspace - retrying with -vf scale... Opening video filter: [scale] Movie-Aspect is undefined - no prescaling applied. [swscaler @ 0x2bffb980]BICUBIC scaler, from rgb555le to yuv420p using C [swscaler @ 0x2bffb980]No accelerated colorspace conversion found from yuv420p to bgra. VO: [fbdev2] 320x240 => 320x240 BGRA Fontconfig warning: ignoring C.UTF-8: not a valid language tag Fontconfig warning: ignoring C.UTF-8: not a valid language tag Fontconfig warning: ignoring C.UTF-8: not a valid language tag V: 6.7 0/ 0 1% 23% 0.0% 0 0 Exiting... (End of file) #Play a video on HDMI monitor when not set as a default monitor (by u-boot). List all the mapped displays:
# cat /proc/cmdline; for fb in /sys/class/graphics/fb?; do echo "----$fb"; cat $fb/name; cat $fb/mode; cat $fb/fsl_disp_*; doneAccording to the listed devices, find the HDMI monitor (in this case located in fb3) and enable it (or disable):
// enable fb3 display # echo 0 > /sys/class/graphics/fb3/blank // disable fb3 display # echo 1 > /sys/class/graphics/fb3/blankThe device, where the video will be played, needs to be specified (in this case /dev/fb3). Play a video in a loop on selected monitor:
# mplayer -vo fbdev2:/dev/fb3 -vf scale -zoom -loop 0 -xy 1024 dfs.aviStart the X-session on HDMI from the console (Note: These commands may not work on every filesystem - tested with Ubuntu 13.04)
# export DISPLAY=:0.0 # startx &
LVDS
Playing a video file into the LVDS display (setup in u-boot as a default)# mplayer -vo fbdev2 -vf scale -zoom -xy 1024 78.aviStart the X-session on LVDS from the console (Note: These commands may not work on every filesystem - tested with Ubuntu 13.04)
# export DISPLAY=:0.0 # startx &
Adding custom LVDS display support
If you need to add a custom display support, you can specify settings (e.g. the resolution or the timing) directly in the kernel. Set these parameters in the structure ldb_modedb[] which is located in the file drivers/video/mxc/ldb.c As an example we will setup the display ETV570G6DHU.static struct fb_videomode ldb_modedb[] = { // configuration of the other displays { "LDB-ETV570", 60, 640, 480, 39714, // pixel clock (in picoseconds), 144, 16, // left (left margin (in pixels)), right (right margin (in pixels)) 35, 10, // upper (upper margin (in pixel lines)), lower (lower margin (in pixel lines)) 30, 3, // hslen (horizontal sync length (in pixels)), vslen (vertical sync length (in pixel lines)) 0, FB_VMODE_NONINTERLACED, FB_MODE_IS_DETAILED,}, };You also need to include information about your display in the board file located in arch/arm/mach-mx6/board-mx6q_sabresd.c
static struct ipuv3_fb_platform_data sabresd_fb_data[] = { // other displays data { .disp_dev = "ldb", .interface_pix_fmt = IPU_PIX_FMT_RGB666, .mode_str = "LDB-ETV570", .default_bpp = 16, .int_clk = false, .late_init = false, }, };After you recompile the kernel, update uBoot parameters:
> setenv bootargs_mmc 'setenv bootargs ${bootargs} ip=dhcp root=/dev/mmcblk0p1 rootwait video=mxcfb0:dev=ldb,LDB-ETV570,if=RGB666 vmalloc=400M fbmem=28M fbcon=28M' > saveenv; reset!!!BE AWARE: This step is important for displays with small resolution (pixelclock lower than 38.7MHz)
The default internal LVDS clock may be for some displays with lower resolution too high. This results in a loss of the part of the screen (screen goes over the edge of the display).To correct this issue you will need to change the source of the internal LVDS clock (in the file arch/arm/mach-mx6/clock.c)
// default setting clk_set_parent(&ldb_di0_clk, &pll2_pfd_352M); clk_set_parent(&ldb_di0_clk, &pll5_video_main_clk);
Create a partition on your SATA drive
# fdisk /dev/sda WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted. Command (m for help): p Disk /dev/sda: 60.0 GB, 60022480896 bytes 255 heads, 63 sectors/track, 7297 cylinders, total 117231408 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000986d9 Device Boot Start End Blocks Id System Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): Using default value 1 First sector (2048-117231407, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-117231407, default 117231407): Using default value 117231407 Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. #Format your SATA HDD
# mkfs.ext3 /dev/sda1 mke2fs 1.42.5 (29-Jul-2012) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 3670016 inodes, 14653670 blocks 732683 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=0 448 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done #Mount your SATA HDD to /media
# mount /dev/sda1 /media/ # ls -la /media/ total 24 drwxr-xr-x 3 root root 4096 Dec 28 14:44 . drwxr-xr-x 22 root linaro 4096 Dec 20 09:30 .. drwx------ 2 root root 16384 Dec 28 14:44 lost+found #Now, you can copy a video to /media and play it. This will perform a simple SATA test.
I2C
# i2cdetect 1 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-1. I will probe address range 0x03-0x77. Continue? [Y/n] y 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30: 30 -- -- -- -- -- -- 37 -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- 4a 4b -- -- -- -- 50: UU 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- # [/code]Testing I2C RTC
Read RTC at address 0x51 (0xA2/0xA3)# i2cdump -r 0-0xf 1 0x51 b WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-1, address 0x51, mode byte Probe range limited to 0x00-0x0f. Continue? [Y/n] y 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 08 80 85 84 83 a8 86 12 13 88 82 90 91 84 07 00 ???????????????. #Set Month in the RTC to December (check datasheet for register description at http://www.nxp.com/documents/data_sheet/PCF8563.pdf )
# i2cset 1 0x51 0x07 0x12 WARNING! This program can confuse your I2C bus, cause data loss and worse! DANGEROUS! Writing to a serial EEPROM on a memory DIMM may render your memory USELESS and make your system UNBOOTABLE! I will write to device file /dev/i2c-1, chip address 0x51, data address 0x07, data 0x12, mode byte. Continue? [y/N] y #
Testing I2C GPIO Expander
Read I2C GPIO Expander at address 0x27 (0x4E/0x4F)# i2cdump -r 0-0x7 1 0x27 b WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-1, address 0x27, mode byte Probe range limited to 0x00-0x07. Continue? [Y/n] y 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 47 df ff ff 00 00 ff ff G?...... #Example of controlling user LED connected to IO1_6 (see datasheet at http://www.nxp.com/documents/data_sheet/PCA9535_PCA9535C.pdf )
//set the GPIO expander pin IO1.6 as output # i2cset 1 0x27 0x07 0xBF WARNING! This program can confuse your I2C bus, cause data loss and worse! I will write to device file /dev/i2c-1, chip address 0x27, data address 0x07, data 0xbf, mode byte. Continue? [Y/n] y //Set the GPIO expander pin IO.6 to LOW (This will switch OFF the LED) # i2cset 1 0x27 0x03 0xBF WARNING! This program can confuse your I2C bus, cause data loss and worse! I will write to device file /dev/i2c-1, chip address 0x27, data address 0x03, data 0xbf, mode byte. Continue? [Y/n] y # //Set the GPIO expander pin IO.6 to HIGH (This will switch ON the LED) # i2cset 1 0x27 0x03 0xFF WARNING! This program can confuse your I2C bus, cause data loss and worse! I will write to device file /dev/i2c-1, chip address 0x27, data address 0x03, data 0xff, mode byte. Continue? [Y/n] y #
I2C Touchscreen TSC2007
To use this TSC2007 touchscreen we need to add few lines into the boardfile located at arch/arm/mach-mx6/board-mx6q_sabresd.c You can find all the changes in this Github commit.First you need to include the TSC2007 header file:
#include <linux/i2c/tsc2007.h>Select the signal for the touchscreen interrupt (iMX6 use the pin NANDF_WP_B as gpio6_GPIO[9] - pad E15).
Note: SabreSD board use this pin for another purpose (SABRESD_AUX_3V15_EN or SABRESD_DISP0_WR_REVB). You may need to disable the definitions of these constant to avoid the collision (e.g. the direction of the GPIO).
#define SABRESD_TS_INT IMX_GPIO_NR(6, 9)Add the TSC2007 data structure. Setup the parameter x_plate_ohms according to your touchscreen terminal resistance:
static struct tsc2007_platform_data tsc2007_info = { .model = 2007, .x_plate_ohms = 500, };Insert the TSC 2007 into the list of available I2C devices (we are still working with board-mx6q_sabresd.c) TSC2007 is connected to I2C2 and uses 7-bit address 0x48. This address is defined in the structure mxc_i2c1_board_info[]):
static struct i2c_board_info mxc_i2c1_board_info[] __initdata = { // other devices { I2C_BOARD_INFO("tsc2007", 0x48), .type = "tsc2007", .platform_data = &tsc2007_info, .irq = gpio_to_irq(SABRESD_TS_INT), }, };Initialize the interrupt signal (in the mx6_sabresd_board_init() function):
gpio_request(SABRESD_TS_INT, "tsc2007_irq"); gpio_direction_input(SABRESD_TS_INT); gpio_free(SABRESD_TS_INT);Now, we need to fix the tsc2007.c driver file located at drivers/input/touchscreen/
This is the fix: Call function init_platform_hw() only if exists (without this, kernel was crashing):
if (pdata->init_platform_hw) pdata->init_platform_hw();The last thing is to Enable TSC2007 in imx6_defconfig (located in arch/arm/configs/)
CONFIG_TOUCHSCREEN_TSC2007=yor via menuconfig
make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi- menuconfig Add a star to: make menuconfig -> Device Drivers -> Input device support -> Touchscreens -> TSC2007 based touchscreensRecompile the kernel (or use this one) and start the board with the LVDS display which supports touchscreen. Note: Check if the interrupt signal is connected to the TSC2007 chip - check if resistor R174 on Rex Development BB is fitted. Power up the board and stop the booting. Setup in u-boot:
> setenv bootcmd_mmc 'run bootargs_base bootargs_mmc; mmc dev 1; ext2load mmc 1 0x10800000 imx6rex-uImage-lvds-clock-TSC2007-support-31-JUL-2014 3916620; bootm 0x10800000' > saveenv; resetTouchscreen calibration
Download and install xinput_calibrator tool:
# wget https://github.com/downloads/tias/xinput_calibrator/xinput_calibrator-0.7.5.tar.gz # tar -pxvzf xinput_calibrator-0.7.5.tar.gz # cd xinput_calibrator-0.7.5 # ./configure # make # sudo make installAfter the installation is completed open the X session first
# export DISPLAY=:0.0 # startx &Run the calibration now (follow the steps from the screen)
# xinput_calibratorAfter the calibration is successfully finished you will see the results (something like below). Note: you may need to run the calibration twice for the correct result.
Section "InputClass" Identifier "calibration" MatchProduct "TSC2007 Touchscreen" Option "Calibration" "77 3946 3915 143" Option "SwapAxes" "1" EndSectionIn case your touchscreen is working but inverted, run the calibration one more time and it will work correctly after that.
If you want to make this calibration settings permanent create a X-window config file and copy these information there
# mkdir /etc/X11/xorg.conf.d/ # nano /etc/X11/xorg.conf.d/99-calibration.confWhen you reset the board the touchscreen is calibrated from this config file.
Test the touchscreen
Run the X-window
# export DISPLAY=:0.0 # startx &Start input test tool and check if the dimension on console are in match with the clicked point on the display
# xinput test "TSC2007 Touchscreen"You will see something like this (in this example we clicked in four corners of the screen):
motion a[0]=101 a[1]=70 a[2]=884 motion a[0]=100 a[1]=72 a[2]=939 motion a[2]=0 button release 1 motion a[0]=4064 a[1]=30 a[2]=73 button press 1 motion a[0]=4056 a[1]=29 a[2]=69 motion a[0]=4057 a[1]=29 a[2]=68 motion a[0]=4058 a[1]=32 motion a[0]=4059 a[1]=31 a[2]=72 motion a[0]=4060 a[1]=35 a[2]=82 motion a[0]=4061 a[1]=50 a[2]=176 motion a[2]=0 button release 1 motion a[0]=84 a[1]=4007 a[2]=815 button press 1 motion a[0]=83 a[1]=4008 a[2]=806 motion a[0]=84 a[1]=4005 a[2]=816 motion a[0]=86 a[1]=4007 a[2]=798 motion a[0]=84 a[1]=4008 a[2]=818 motion a[0]=85 a[1]=4006 a[2]=835 motion a[0]=88 a[1]=4006 a[2]=888 motion a[2]=0 button release 1 motion a[0]=4088 a[1]=4002 a[2]=804 button press 1 motion a[0]=4088 a[1]=4001 a[2]=795 motion a[0]=4088 a[1]=4003 a[2]=794 motion a[0]=4088 a[1]=4003 a[2]=787 motion a[1]=3998 a[2]=819 motion a[0]=4085 a[1]=4000 a[2]=870 motion a[2]=0 button release 1
Audio SGTL5000
Access to audio mixer:# alsamixerPlaying a wav file
# aplay -D hw:0,0 /home/linaro/blackbird.wavRecord audio from microphone Before recording open alsamixer and set the microphone gain to the maximum level. Connect a microphone to the PINK jack and run:
# arecord -f dat -d 10 -D hw:0,0 test.wavPlay the recorded file:
# aplay -f dat test.wavRecord audio from line in In alsamixer enable Line In function and set the Capture Mux to "Line In" option. For this test, we use a loop back cable and connect Line Out -> Line In. We play an audio file to the Line Out and record it from Line in. Run these two commands in different terminals (or use '&' at the end of the first aplay command):
# aplay -D hw:0,0 /home/ubuntu/blackbird.wav # arecord -f dat -d 10 -D hw:0,0 test.wavPlay the recorded file:
# aplay -f dat test.wavSGTL500.c driver changes We had to do some tweaking in the audio driver. Find this file sound/soc/codecs/sgtl500.c and fix a microphone bug:
@@ -602,7 +602,7 @@ static int mixer_vol_put(struct snd_kcontrol *kcontrol, SOC_SINGLE_TLV("Mic Volume", SGTL5000_CHIP_MIC_CTRL, - 0, 4, 0, mic_gain_tlv), + 0, 3, 0, mic_gain_tlv), //!mm driver mic fix - changed from 4 to 3According to the latest SGTL5000 we provide external digital supply (VDDD). We have to disable the internal linear VDD regulator:
@@ -996,10 +996,11 @@ static int ldo_regulator_enable(struct regulator_dev *dev) reg = codec->hw_read(codec, SGTL5000_CHIP_ANA_POWER); - reg |= SGTL5000_LINEREG_D_POWERUP; + //!mm do not enable LDO, orig: reg |= SGTL5000_LINEREG_D_POWERUP; codec->write(codec, SGTL5000_CHIP_ANA_POWER, reg); reg &= ~SGTL5000_LINREG_SIMPLE_POWERUP; + reg &= ~SGTL5000_STARTUP_POWERUP; //!mm needed if external VDDD is used /* when internal ldo enabled, simple digital power can be disabled */
Read CPU Temperature
# cat /sys/devices/virtual/thermal/thermal_zone0/temp
Read CPU Frequency
# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq 996000 # cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 996000
GPU Test
Enable Vivante in menuconfig:make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi- menuconfig Add a star to: make menuconfig -> Device Drivers -> Graphics support -> Direct Rendering Manager (XFree86 4.1.0 and higher DRI Support) Add a star to: make menuconfig -> Device Drivers -> Graphics support -> Direct Rendering Manager (XFree86 4.1.0 and higher DRI Support) -> Vivante GCCoreCompile new kernel and run it with the file system from here Xubuntu Raring (13.04) rootfs. Once it boots up, follow the steps here (start by number 2): I.MX6 Ubuntu 13.04 Debugging GPU Acceleration. This runs very nicely:
cd /root/gpu-viv-bin-mx6q-3.5.7-1.0.0-alpha.2-hfp/opt/viv_samples/vdk ./tutorial7
Bonie++
Install bonie++$ cd /tmp $ wget http://www.coker.com.au/bonnie++/bonnie++-1.03e.tgz $ tar -zxvf bonnie++-1.03e.tgz $ cd bonnie++-1.03e $ ./configure $ make # make install
Run SATA test
$ bonnie++ Writing with putc()...done Writing intelligently...done Rewriting...done Reading with getc()...done Reading intelligently...done start 'em...done...done...done... Create files in sequential order...done. Stat files in sequential order...done. Delete files in sequential order...done. Create files in random order...done. Stat files in random order...done. Delete files in random order...done. Version 1.03e ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP ubuntu-imx6 1496M 7277 99 102772 99 62509 58 7981 99 170826 64 9136 85 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 16193 98 +++++ +++ 19412 99 16615 100 +++++ +++ 17947 96 ubuntu-imx6,1496M,7277,99,102772,99,62509,58,7981,99,170826,64,9135.9,85,16,16193,98,+++++,+++,19412,99,16615,100,+++++,+++,17947,96
Run SD0 test (Sandisk 16GB)
$ sudo bonnie++ -d /media/sd0/tmp_bonnie/ -u root Using uid:0, gid:0. Writing with putc()...done Writing intelligently...done Rewriting...done Reading with getc()...done Reading intelligently...done start 'em...done...done...done... Create files in sequential order...done. Stat files in sequential order...done. Delete files in sequential order...done. Create files in random order...done. Stat files in random order...done. Delete files in random order...done. Version 1.03e ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP ubuntu-imx6 1496M 3378 46 3016 2 3305 2 7123 87 25442 6 1222 6 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 16239 99 +++++ +++ 19161 99 8344 50 +++++ +++ 18723 99 ubuntu-imx6,1496M,3378,46,3016,2,3305,2,7123,87,25442,6,1222.5,6,16,16239,99,+++++,+++,19161,99,8344,50,+++++,+++,18723,99
Run SD1 test (Sandisk 8GB)
$ sudo bonnie++ -d /media/sd1/tmp_bonnie/ -u root [sudo] password for ubuntu: Using uid:0, gid:0. Writing with putc()...done Writing intelligently...done Rewriting...done Reading with getc()...done Reading intelligently...done start 'em...done...done...done... Create files in sequential order...done. Stat files in sequential order...done. Delete files in sequential order...done. Create files in random order...done. Stat files in random order...done. Delete files in random order...done. Version 1.03e ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP ubuntu-imx6 1496M 2944 40 2848 2 3018 1 7035 86 20955 5 895.0 4 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 15065 92 +++++ +++ 19361 99 16519 99 +++++ +++ 18864 100 ubuntu-imx6,1496M,2944,40,2848,2,3018,1,7035,86,20955,5,895.0,4,16,15065,92,+++++,+++,19361,99,16519,99,+++++,+++,18864,100
Wireless Modem (Telit HE910 PCIE mini)
Enable modem support in menuconfig:make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi- menuconfig Add a star to: make menuconfig -> Device Drivers -> USB support -> USB Modem (CDC ACM) supportInstall serial console e.g. picocom:
sudo apt-get install picocomRun serial console on the modem port:
picocom /dev/ttyACM3 -b 115200Test network connection (here is a nice document with AT command examples):
AT OK AT+CPIN? +CPIN: READY OK AT+CREG? +CREG: 0,1 OK AT+COPS? +COPS: 0,0,"O2 - SK ",2 OKConfigure Audio support on the audio codec. Create a file:
# nano audio_i2c_config.shIt is done over I2C. Write this script into audio_i2c_config.sh:
#! /bin/bash i2cset 1 0x18 0x04 0x00 i2cset 1 0x18 0x05 0x10 i2cset 1 0x18 0x06 0x90 i2cset 1 0x18 0x07 0x00 i2cset 1 0x18 0x08 0x10 i2cset 1 0x18 0x09 0x0a i2cset 1 0x18 0x0a 0x33 i2cset 1 0x18 0x0b 0x00 i2cset 1 0x18 0x0c 0x00 i2cset 1 0x18 0x0d 0x33 i2cset 1 0x18 0x0e 0x0c i2cset 1 0x18 0x0f 0x0c i2cset 1 0x18 0x10 0x09 i2cset 1 0x18 0x11 0x09 i2cset 1 0x18 0x12 0x24 i2cset 1 0x18 0x13 0x24 i2cset 1 0x18 0x14 0x40 i2cset 1 0x18 0x15 0x00 i2cset 1 0x18 0x16 0x60 i2cset 1 0x18 0x17 0x8aRun the script (press enter until it finishes):
chmod 777 audio_i2c_config.sh ./audio_i2c_config.shNow configure audio support on the HE910 modem. Run these AT commands:
AT#DVI=1,2,1 OK AT#DVIEXT=1,0,0,1,0 OKYou are ready to receive a call. Call you modem number and use "ATA" command to receive the call:
RING RING ATA OKTo change speakers volume up & down, use (see MAX9876 datasheet for more settings):
i2cset 1 0x18 0x10 0x10 //volume Left -8dB i2cset 1 0x18 0x11 0x10 //volume Right -8dBTo change microphone sensitivity:
i2cset 1 0x18 0x12 0x60 //gain left +20dB + 20dB i2cset 1 0x18 0x13 0x60 //gain right +20dB + 20dB
Wifi PCIE mini card Intel 4965AGN
Enable WiFi support in menuconfig:make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi- menuconfig //enable PCIE support Add a star to: make menuconfig -> System Type -> Freescale MXC Implementations -> PCI Express support Add a star to: make menuconfig -> Bus support -> Message Signaled Interrupts (MSI and MSI-X) Add a star to: make menuconfig -> Bus support -> PCI Express support //enable iwl4965 support Add a star to: make menuconfig -> Networking support -> Wireless -> Generic IEE 802.11 Netwroking Stack (mac80211) Add a star to: make menuconfig -> Device Drivers -> Network device support -> Wireless LAN -> Intel Wireless Wifi 4965AGN (iwl4965) //disable FEC (the on board ethernet) Remove the star from: make menuconfig -> Device Drivers -> Network device support -> Ethernet (10 or 100Mbit)Compile the new kernel. Now we need to provide wifi firmware to the card:
wget http://www.imx6rex.com/wp-content/uploads/2014/03/iwlwifi-4965-ucode-228.61.2.24.tar tar -xvf iwlwifi-4965-ucode-228.61.2.24.tar cd iwlwifi-4965-ucode-228.61.2.24 sudo cp iwlwifi-4965-2.ucode /lib/firmware/Reboot your board, so it loads the firmware to the card:
sudo rebootCheck if you can see your wifi. It should look like this:
ubuntu@ubuntu-imx6:~/iwlwifi-4965-ucode-228.61.2.24$ lspci 00:00.0 PCI bridge: Device 16c3:abcd (rev 01) 01:00.0 Network controller: Intel Corporation PRO/Wireless 4965 AG or AGN [Kedron] Network Connection (rev 61)Configure Wifi. First create this file:
nano wpa.confand insert your Wifi information there (replace ssid and psk with your Wifi settings):
network={ ssid="wifinetworkname" psk="wifipassword" }Note: My router settings are - WPA PSK, aes ccm, WPA pre-shared key Run:
wpa_supplicant -B -Dwext -iwlan0 -cwpa.confWe will configure the card with static IP. Add IP (use IP from your network) and Route (update IP according your subnet):
ifconfig wlan0 192.168.110.120 route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.110.1If the ping is not working, update DNS settings. Open:
sudo nano /etc/resolv.confand update nameserver to:
nameserver 8.8.8.8Try to ping google:
root@ubuntu-imx6:~# ping www.google.com PING www.google.com (62.197.198.227) 56(84) bytes of data. 64 bytes from cache.google.com (62.197.198.227): icmp_req=1 ttl=60 time=5.02 ms 64 bytes from cache.google.com (62.197.198.227): icmp_req=2 ttl=60 time=4.36 ms 64 bytes from cache.google.com (62.197.198.227): icmp_req=3 ttl=60 time=4.57 msThis is how it should look when everything is configured properly:
ubuntu@ubuntu-imx6:~/iwlwifi-4965-ucode-228.61.2.24$ iwconfig lo no wireless extensions. wlan0 IEEE 802.11abgn ESSID:"s15as" Mode:Managed Frequency:2.412 GHz Access Point: D4:CA:6D:6B:64:57 Bit Rate=65 Mb/s Tx-Power=15 dBm Retry long limit:7 RTS thr:off Fragment thr:off Power Management:off Link Quality=70/70 Signal level=-38 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:4684180 Invalid misc:2498 Missed beacon:0 ubuntu@ubuntu-imx6:~/iwlwifi-4965-ucode-228.61.2.24$ ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) wlan0 Link encap:Ethernet HWaddr 00:13:e8:44:2b:51 inet addr:192.168.110.120 Bcast:192.168.110.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2698546 errors:0 dropped:0 overruns:0 frame:0 TX packets:5038426 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:490905975 (490.9 MB) TX bytes:3272449877 (3.2 GB) ubuntu@ubuntu-imx6:~/iwlwifi-4965-ucode-228.61.2.24$Disconnect the onboard ethernet and test network performance:
//start iperf server, on a local computer fedevel@ubuntu:~$ iperf -s //start iper client on the iMX6 Rex board ubuntu@ubuntu-imx6:~$ sudo iperf -c 192.168.10.90 -t 60 -i 10 ------------------------------------------------------------ Client connecting to 192.168.10.90, TCP port 5001 TCP window size: 16.0 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.110.120 port 56353 connected with 192.168.10.90 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 57.9 MBytes 48.5 Mbits/sec [ 3] 10.0-20.0 sec 51.0 MBytes 42.8 Mbits/sec [ 3] 20.0-30.0 sec 58.1 MBytes 48.8 Mbits/sec [ 3] 30.0-40.0 sec 56.4 MBytes 47.3 Mbits/sec [ 3] 40.0-50.0 sec 53.6 MBytes 45.0 Mbits/sec [ 3] 50.0-60.0 sec 60.9 MBytes 51.1 Mbits/sec [ 3] 0.0-60.0 sec 338 MBytes 47.2 Mbits/sec ubuntu@ubuntu-imx6:~$and the other direction
//start iperf server on the iMX6 Rex board # iperf -s //start iperf client on a local computer fedevel@fedevel-ubuntu:~/tmp/stressapptest-read-only$ iperf -c 192.168.110.120 -t 60 -i 10 ------------------------------------------------------------ Client connecting to 192.168.110.120, TCP port 5001 TCP window size: 16.0 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.10.90 port 38143 connected with 192.168.110.120 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 49.2 MBytes 41.3 Mbits/sec [ 3] 10.0-20.0 sec 48.1 MBytes 40.4 Mbits/sec [ 3] 20.0-30.0 sec 50.6 MBytes 42.5 Mbits/sec [ 3] 30.0-40.0 sec 49.5 MBytes 41.5 Mbits/sec [ 3] 40.0-50.0 sec 49.6 MBytes 41.6 Mbits/sec [ 3] 50.0-60.0 sec 50.3 MBytes 42.2 Mbits/sec [ 3] 0.0-60.1 sec 297 MBytes 41.5 Mbits/sec fedevel@fedevel-ubuntu:~/tmp/stressapptest-read-only$
Add an UART port (USB to UART support)
Enable USB to UART driver in menuconfig:make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi- menuconfig Add a star to: make menuconfig -> Device Drivers -> USB Support -> USB Serial Converter Support Add a star to: make menuconfig -> Device Drivers -> USB Support -> USB Serial Converter Support -> USB Prolific 2303 Single Port Serial Driver*Note: For a different USB to serial port chip (e.g. FTDI), try to find it in the "make menuconfig -> Device Drivers -> USB Support -> USB Serial Converter Support ->" list Compile the new Kernel and run it. When fully booted up, plug in your USB to serial port device. We used STLAB "U-350 USB to Serial adapter 1 Port". Run "dmesg" and check what device was created (in our case "/dev/ttyUSB0"):
# dmesg | tail -f usb 2-1: new full speed USB device number 3 using fsl-ehci pl2303 2-1:1.0: pl2303 converter detected usb 2-1: pl2303 converter now attached to ttyUSB0Done. You can now access to the serial port - here is an example of running serial console on your new serial port:
picocom /dev/ttyUSB0 -b 115200
Check all the CPU clocks and frequencies
Use this script to check all the frequencies:#!/bin/bash if ! mount|grep -sq '/sys/kernel/debug'; then mount -t debugfs none /sys/kernel/debug fi saved_path=$PWD printf "%-24s %-24s %3s %9s\n" "clock" "parent" "use" "rate" for foo in $(find /sys/kernel/debug/clock -type d); do if [ "$foo" = '/sys/kernel/debug/clock' ]; then continue fi cd $foo use="$(cat usecount)" rate="$(cat rate)" clk="$(basename $foo)" cd .. parent="$(basename $PWD)" if [ "$parent" = 'clock' ]; then parent=" ---" fi printf "%-24s %-24s %2d %10d\n" "$clk" "$parent" "$use" "$rate" cd $saved_path doneThe result may look like this:
root@ubuntu-imx6:~# ./dump-clocks.sh clock parent use rate ckih_clk --- 0 0 ckih2_clk --- 0 0 ckil_clk --- 0 32768 caam_mem_clk --- 0 0 mlb150_clk --- 0 0 anaclk_1 --- 0 0 anaclk_2 --- 0 0 osc_clk --- 7 24000000 pll6_mlb150_main_clk osc_clk 0 24000000 pll7_usb_host_main_clk osc_clk 0 480000000 pll1_sys_main_clk osc_clk 1 996000000 pll1_sw_clk pll1_sys_main_clk 1 996000000 cpu_clk pll1_sw_clk 1 996000000 twd_clk cpu_clk 0 498000000 pll4_audio_main_clk osc_clk 0 175999998 asrc_clk pll4_audio_main_clk 0 175999998 gpt_clk osc_clk 1 3000000 pll8_enet_main_clk osc_clk 2 24000000 enet_clk pll8_enet_main_clk 1 50000000 sata_clk pll8_enet_main_clk 1 24000000 clko2_clk osc_clk 1 24000000 pll3_usb_otg_main_clk osc_clk 4 480000000 pll3_pfd_720M pll3_usb_otg_main_clk 0 720000000 pll3_pfd_508M pll3_usb_otg_main_clk 0 508235294 ssi1_clk pll3_pfd_508M 0 63529411 ssi2_clk pll3_pfd_508M 0 63529411 ssi3_clk pll3_pfd_508M 0 63529411 pll3_pfd_454M pll3_usb_otg_main_clk 0 454736842 spdif0_clk_0 pll3_pfd_454M 0 28421052 gpu2d_core_clk pll3_usb_otg_main_clk 0 480000000 usb_phy1_clk pll3_usb_otg_main_clk 1 1010065408 usb_phy3_clk pll3_usb_otg_main_clk 0 1010065408 usb_phy4_clk pll3_usb_otg_main_clk 0 1010065408 pll3_pfd_540M pll3_usb_otg_main_clk 1 540000000 hdmi_isfr_clk pll3_pfd_540M 1 540000000 mipi_pllref_clk pll3_pfd_540M 0 540000000 pll3_sw_clk pll3_usb_otg_main_clk 1 480000000 pll3_120M pll3_sw_clk 0 120000000 esai_clk pll3_sw_clk 0 30000000 pll3_80M pll3_sw_clk 1 80000000 uart_clk pll3_80M 1 80000000 ascan1_module_clk can_clk_root 0 30000000 can2_module_clk can_clk_root 0 30000000 ecspi0_clk pll3_60M 0 60000000 ecspi1_clk pll3_60M 0 60000000 ecspi2_clk pll3_60M 0 60000000 ecspi3_clk pll3_60M 0 60000000 ecspi4_clk pll3_60M 0 60000000 pll5_video_main_clk osc_clk 1 297000000 ipu1_di_clk_0 pll5_video_main_clk 0 99000000 ipu2_di_clk_1 pll5_video_main_clk 0 99000000 ipu1_di_clk_1 pll5_video_main_clk 1 148500000 ipu1_pixel_clk_1 ipu1_di_clk_1 1 148500000 pll2_528_bus_main_clk osc_clk 1 528000000 pll2_pfd_352M pll2_528_bus_main_clk 0 452571428 ldb_di0_clk pll2_pfd_352M 0 64653061 ipu2_di_clk_0 ldb_di0_clk 0 64653061 ldb_di1_clk pll2_pfd_352M 0 64653061 pll2_pfd_594M pll2_528_bus_main_clk 0 594000000 gpu3d_shader_clk pll2_pfd_594M 0 594000000 pll2_pfd_400M pll2_528_bus_main_clk 0 396000000 pll2_200M pll2_pfd_400M 0 198000000 mmdc_ch1_axi_clk pll2_pfd_400M 0 396000000 usdhc1_clk pll2_pfd_400M 0 198000000 usdhc2_clk pll2_pfd_400M 0 198000000 emi_clk pll2_pfd_400M 0 198000000 hsi_tx_clk pll2_pfd_400M 0 198000000 enfc_clk pll2_pfd_400M 0 19800000 gpmi_io_clk enfc_clk 0 19800000 usdhc4_clk pll2_pfd_400M 0 198000000 gpmi_bch_clk usdhc4_clk 0 198000000 usdhc3_clk pll2_pfd_400M 0 198000000 apbh_dma_clk usdhc3_clk 0 198000000 rc_serial_clk pll3_sw_clk 0 7500000 pll3_60M pll3_sw_clk 0 60000000 can_clk_root pll3_60M 0 30000000 can1_module_clk can_clk_root 0 30000000 can2_module_clk can_clk_root 0 30000000 ecspi0_clk pll3_60M 0 60000000 ecspi1_clk pll3_60M 0 60000000 ecspi2_clk pll3_60M 0 60000000 ecspi3_clk pll3_60M 0 60000000 ecspi4_clk pll3_60M 0 60000000 pll5_video_main_clk osc_clk 1 297000000 ipu1_di_clk_0 pll5_video_main_clk 0 99000000 ipu2_di_clk_1 pll5_video_main_clk 0 99000000 ipu1_di_clk_1 pll5_video_main_clk 1 148500000 ipu1_pixel_clk_1 ipu1_di_clk_1 1 148500000 pll2_528_bus_main_clk osc_clk 1 528000000 pll2_pfd_352M pll2_528_bus_main_clk 0 452571428 ldb_di0_clk pll2_pfd_352M 0 64653061 ipu2_di_clk_0 ldb_di0_clk 0 64653061 ldb_di1_clk pll2_pfd_352M 0 64653061 pll2_pfd_594M pll2_528_bus_main_clk 0 594000000 gpu3d_shader_clk pll2_pfd_594M 0 594000000 pll2_pfd_400M pll2_528_bus_main_clk 0 396000000 pll2_200M pll2_pfd_400M 0 198000000 mmdc_ch1_axi_clk pll2_pfd_400M 0 396000000 usdhc1_clk pll2_pfd_400M 0 198000000 usdhc2_clk pll2_pfd_400M 0 198000000 emi_clk pll2_pfd_400M 0 198000000 hsi_tx_clk pll2_pfd_400M 0 198000000 enfc_clk pll2_pfd_400M 0 19800000 gpmi_io_clk enfc_clk 0 19800000 usdhc4_clk pll2_pfd_400M 0 198000000 gpmi_bch_clk usdhc4_clk 0 198000000 usdhc3_clk pll2_pfd_400M 0 198000000 apbh_dma_clk usdhc3_clk 0 198000000 gpmi_apb_clk usdhc3_clk 0 198000000 gpmi_bch_apb_clk usdhc3_clk 0 198000000 periph_clk pll2_528_bus_main_clk 4 528000000 axi_clk periph_clk 1 264000000 gpu3d_axi_clk axi_clk 0 264000000 vpu_clk axi_clk 0 264000000 emi_slow_clk axi_clk 0 132000000 gpu2d_axi_clk axi_clk 0 264000000 openvg_axi_clk gpu2d_axi_clk 0 264000000 pcie_axi_clk axi_clk 0 264000000 pcie_clk pcie_axi_clk 0 264000000 pcie_ep_clk pcie_axi_clk 0 264000000 vdo_axi_clk axi_clk 0 264000000 vdoa_clk vdo_axi_clk 0 264000000 ahb_clk periph_clk 6 132000000 sdma_clk ahb_clk 0 132000000 mx6per1_clk ahb_clk 3 132000000 pl301_mx6qperl_bch mx6per1_clk 0 132000000 ipg_clk ahb_clk 5 66000000 spba_clk ipg_clk 0 66000000 iim_clk ipg_clk 1 66000000 ipg_perclk ipg_clk 1 22000000 i2c_clk_0 ipg_perclk 0 22000000 i2c_clk_1 ipg_perclk 0 22000000 i2c_clk_2 ipg_perclk 0 22000000 pwm_clk_0 ipg_perclk 1 22000000 pwm_clk_1 ipg_perclk 0 22000000 pwm_clk_2 ipg_perclk 0 22000000 pwm_clk_3 ipg_perclk 0 22000000 enet_mdc_clk ipg_clk 0 66000000 usboh3_clk ahb_clk 1 132000000 hdmi_iahb_clk ahb_clk 1 132000000 aips_tz2_clk ahb_clk 0 132000000 aips_tz1_clk ahb_clk 0 132000000 clko_clk ahb_clk 1 16500000 mmdc_ch0_axi_clk periph_clk 5 528000000 gpu3d_core_clk mmdc_ch0_axi_clk 0 528000000 perfmon0_clk mmdc_ch0_axi_clk 0 528000000 perfmon2_clk mmdc_ch0_axi_clk 0 528000000 ipu1_clk mmdc_ch0_axi_clk 1 264000000 perfmon1_clk ipu1_clk 0 264000000 ipu1_pixel_clk_0 ipu1_clk 0 0 ipu2_clk mmdc_ch0_axi_clk 0 264000000 ipu2_pixel_clk_0 ipu2_clk 0 0 ipu2_pixel_clk_1 ipu2_clk 0 0 root@ubuntu-imx6:~#