Difference between revisions of "IoTGateway/Features/Linux/Software"

From ESS-WIKI
Jump to: navigation, search
(Writing one Qt application that shows up Chinese)
Line 1: Line 1:
 
{{DISPLAYTITLE:Linux Software Features}}
 
{{DISPLAYTITLE:Linux Software Features}}
==Console==
+
 
===How to enable framebuffer console===
+
== Console ==
 +
 
 +
=== How to enable framebuffer console ===
 +
 
 
The following operations are performed with RSB-4410(4410LBV2080)
 
The following operations are performed with RSB-4410(4410LBV2080)
* linux kernel config
+
 
<tt>
+
*linux kernel config
::Device Drivers --->  
+
 
:::Graphics support --->
+
 
::::<<span style="color:red">*</span>> Framebuffer Console support
+
 
</tt>
+
::<tt>Device Drivers ---> </tt>
* u-boot
+
:::<tt>Graphics support ---> </tt>
 +
::::<tt><<span style="color:red">*</span>> Framebuffer Console support</tt>
 +
 
 +
 
 +
 
 +
*u-boot
 
<div style="margin-left: 2em;">
 
<div style="margin-left: 2em;">
 
  setenv bootargs_base 'setenv bootargs console=ttymxc0,115200 <span style="color:red">console=tty0</span> enable_wait_mode=off video_mode=extension
 
  setenv bootargs_base 'setenv bootargs console=ttymxc0,115200 <span style="color:red">console=tty0</span> enable_wait_mode=off video_mode=extension
 
</div>
 
</div>
* files need to be updated
+
*files need to be updated
 +
 
 
:<tt>/etc/inittab</tt>
 
:<tt>/etc/inittab</tt>
 
<div style="margin-left: 2em;">
 
<div style="margin-left: 2em;">
Line 19: Line 28:
 
</div>
 
</div>
 
Notice:
 
Notice:
 +
 
:If the kernel config is set to "<tt><<span style="color:red">M</span>> Framebuffer Console support</tt>", console will show up after module ,<tt>fbcon</tt>, is loaded.
 
:If the kernel config is set to "<tt><<span style="color:red">M</span>> Framebuffer Console support</tt>", console will show up after module ,<tt>fbcon</tt>, is loaded.
  
===How to change debug console port===
+
=== How to change debug console port ===
 +
 
 
The following operations demonstrate how to change UBC-DS31's(based on DS31LBV1150) debug console from UART1(ttymxc0) to UART2(ttymxc1).
 
The following operations demonstrate how to change UBC-DS31's(based on DS31LBV1150) debug console from UART1(ttymxc0) to UART2(ttymxc1).
  
 
*u-boot
 
*u-boot
 +
 
:<tt>include/configs/mx6q_ubc-d31_recovery.h</tt>
 
:<tt>include/configs/mx6q_ubc-d31_recovery.h</tt>
<div style="margin-left: 3em;"><source lang="C">
+
<div style="margin-left: 3em;"><syntaxhighlight lang="C">
 
#define CONFIG_UART_BASE_ADDR  UART2_BASE_ADDR
 
#define CONFIG_UART_BASE_ADDR  UART2_BASE_ADDR
</source></div>
+
</syntaxhighlight></div>
 
:<tt>include/configs/mx6q_ubc-d31_1G_recovery.h</tt>
 
:<tt>include/configs/mx6q_ubc-d31_1G_recovery.h</tt>
 
::modify the settings of <code>bootargs_base</code> contained in the pre-defined macro <code>#define CONFIG_EXTRA_ENV_SETTINGS</code>
 
::modify the settings of <code>bootargs_base</code> contained in the pre-defined macro <code>#define CONFIG_EXTRA_ENV_SETTINGS</code>
<div style="margin-left: 3em;"><source lang="C">
+
<div style="margin-left: 3em;"><syntaxhighlight lang="C">
 
console=ttymxc1,115200
 
console=ttymxc1,115200
</source></div>
+
</syntaxhighlight></div>
 
+
 
:<tt>board/freescale/mx6q_ubc-d31/mx6q_ubc-d31.c</tt>
 
:<tt>board/freescale/mx6q_ubc-d31/mx6q_ubc-d31.c</tt>
 
::insert the following two lines into <code>static void setup_uart(void)</code>
 
::insert the following two lines into <code>static void setup_uart(void)</code>
<div style="margin-left: 3em;"><source lang="C">
+
<div style="margin-left: 3em;"><syntaxhighlight lang="C">
 
mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D27__UART2_TXD);
 
mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D27__UART2_TXD);
 
mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D27__UART2_RXD);
 
mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D27__UART2_RXD);
</source></div>
+
</syntaxhighlight></div>
 
+
 
*linux kernel
 
*linux kernel
 +
 
:<tt>arch/arm/mach-mx6/board-mx6q_advantech.c</tt>
 
:<tt>arch/arm/mach-mx6/board-mx6q_advantech.c</tt>
 
::modify the following two lines in <code>static void __init mx6_sabresd_timer_init(void)</code>
 
::modify the following two lines in <code>static void __init mx6_sabresd_timer_init(void)</code>
<div style="margin-left: 3em;"><source lang="C">
+
<div style="margin-left: 3em;"><syntaxhighlight lang="C">
 
uart_clk = clk_get_sys("imx-uart.1", NULL);
 
uart_clk = clk_get_sys("imx-uart.1", NULL);
 
early_console_setup(UART2_BASE_ADDR, uart_clk);
 
early_console_setup(UART2_BASE_ADDR, uart_clk);
</source></div>
+
</syntaxhighlight></div>
 
+
 
<!--
 
<!--
 
:<tt></tt>
 
:<tt></tt>
<div style="margin-left: 2em;"><source lang="C">
+
<div style="margin-left: 2em;"><span _fck_mw_customtag="true" _fck_mw_tagname="source" _fck_mw_tagtype="t" lang="C" _fck_mw_tagattributes="lang" class="fck_mw_special">fckLR</span></div>
</source></div>
+
 
-->
 
-->
  
===How to disable debug console===
+
=== How to disable debug console ===
 +
 
 
The following operations demonstrate how to disable UBC-DS31's(based on DS31LBV1150) debug console.
 
The following operations demonstrate how to disable UBC-DS31's(based on DS31LBV1150) debug console.
  
 
*u-boot
 
*u-boot
 +
 
:<tt>board/freescale/mx6q_ubc-d31/mx6q_ubc-d31.c</tt>
 
:<tt>board/freescale/mx6q_ubc-d31/mx6q_ubc-d31.c</tt>
 
::comment out all the code within <code>static void setup_uart(void)</code>
 
::comment out all the code within <code>static void setup_uart(void)</code>
Line 65: Line 76:
 
:<tt>common/console.c</tt>
 
:<tt>common/console.c</tt>
 
::modify the following line in <code>int console_init_f(void)</code>
 
::modify the following line in <code>int console_init_f(void)</code>
<div style="margin-left: 3em;"><source lang="C">
+
<div style="margin-left: 3em;"><syntaxhighlight lang="C">
 
gd->have_console = 0;
 
gd->have_console = 0;
</source></div>
+
</syntaxhighlight></div>
 
+
*u-boot environment variable
* u-boot environment variable
+
<div style="margin-left: 3em;"><syntaxhighlight lang="C">
<div style="margin-left: 3em;"><source lang="C">
+
 
setenv silent=y
 
setenv silent=y
</source></div>
+
</syntaxhighlight></div>
 
:
 
:
 
<div style="margin-left: 3em;">
 
<div style="margin-left: 3em;">
 
change console setting, <code>console=none</code>, within <tt>bootargs_base</tt>
 
change console setting, <code>console=none</code>, within <tt>bootargs_base</tt>
 
</div>
 
</div>
 
 
*linux kernel config
 
*linux kernel config
<tt>
+
 
::Device Drivers ---> Character devices ---> Serial drivers --->
+
 
:::<span style="color:red">'''[*]'''</span> IMX serial port support    
+
 
:::[ ]   Support 4 IMX serial ports  
+
::<tt>Device Drivers ---> Character devices ---> Serial drivers ---> </tt>
:::<span style="color:red">'''[ ]'''</span>   Console on IMX serial port  
+
:::<tt><span style="color:red">'''[*]'''</span> IMX serial port support</tt>
</tt>
+
:::<tt>[ ] Support 4 IMX serial ports</tt>
 +
:::<tt><span style="color:red">'''[ ]'''</span> Console on IMX serial port</tt>
 +
 
 +
 
  
 
*linux kernel (recommended)
 
*linux kernel (recommended)
 +
 
:<tt>arch/arm/boot/compressed/misc.c</tt>
 
:<tt>arch/arm/boot/compressed/misc.c</tt>
 
::comment out the following lines in <code>void decompress_kernel (...</code>
 
::comment out the following lines in <code>void decompress_kernel (...</code>
<div style="margin-left: 3em;"><source lang="C">
+
<div style="margin-left: 3em;"><syntaxhighlight lang="C">
 
//putstr("Uncompressing Linux...");
 
//putstr("Uncompressing Linux...");
</source></div>
+
</syntaxhighlight></div>
 
:
 
:
<div style="margin-left: 3em;"><source lang="C">
+
<div style="margin-left: 3em;"><syntaxhighlight lang="C">
 
/*
 
/*
 
if (ret)
 
if (ret)
Line 100: Line 113:
 
         putstr(" done, booting the kernel.\n");
 
         putstr(" done, booting the kernel.\n");
 
*/
 
*/
</source></div>
+
</syntaxhighlight></div>
 +
*target root file system
  
*target root file system
 
 
::comment out the following line in <code>/etc/inittab</code>
 
::comment out the following line in <code>/etc/inittab</code>
<div style="margin-left: 3em;"><source lang="bash">
+
<div style="margin-left: 3em;"><syntaxhighlight lang="bash">
 
#::respawn:/etc/rc.d/rc_mxc.S
 
#::respawn:/etc/rc.d/rc_mxc.S
</source></div>
+
</syntaxhighlight></div>
 
+
 
+
 
<!--
 
<!--
 
:<tt></tt>
 
:<tt></tt>
<div style="margin-left: 2em;"><source lang="C">
+
<div style="margin-left: 2em;"><span _fck_mw_customtag="true" _fck_mw_tagname="source" _fck_mw_tagtype="t" lang="C" _fck_mw_tagattributes="lang" class="fck_mw_special">fckLR</span></div>
</source></div>
+
 
-->
 
-->
  
==Device Tree==
+
== Device Tree ==
 +
 
 
Customize device tree
 
Customize device tree
  
==File System==
+
== File System ==
===NTFS===
+
 
The following operations demonstrate how to add NTFS support for Yocto Linux (ROM-5420 with imx6LBV6120_2016-06-14).  
+
=== NTFS ===
* linux kernel config (please refer to [[IoTGateway/BSP/Linux/iMX6/Yocto_LBV6_User_Guide#To_build_linux_kernel|'''this''']] for details)
+
 
<tt>
+
The following operations demonstrate how to add NTFS support for Yocto Linux (ROM-5420 with imx6LBV6120_2016-06-14).
:: File systems --->  
+
 
:::DOS/FAT/NT Filesystems --->
+
*linux kernel config (please refer to [[IoTGateway/BSP/Linux/iMX6/Yocto_LBV6_User_Guide#To_build_linux_kernel|'''this''']] for details)
::::'''<<span style="color:red">*</span>>''' NTFS file system support
+
 
</tt>
+
 
* BSP
+
 
: add one line to <tt>meta-advantech/recipes-fsl/images/fsl-image-adv.inc</tt>
+
::<tt>File systems ---> </tt>
<div style="margin-left: 2em;"><source lang="bash">
+
:::<tt>DOS/FAT/NT Filesystems ---> </tt>
 +
::::<tt>'''<<span style="color:red">*</span>>''' NTFS file system support</tt>
 +
 
 +
 
 +
 
 +
*BSP
 +
 
 +
:add one line to <tt>meta-advantech/recipes-fsl/images/fsl-image-adv.inc</tt>
 +
<div style="margin-left: 2em;"><syntaxhighlight lang="bash">
 
IMAGE_INSTALL += " fuse ntfs-3g ntfs-3g-ntfsprogs "
 
IMAGE_INSTALL += " fuse ntfs-3g ntfs-3g-ntfsprogs "
</source></div>
+
</syntaxhighlight></div>
* rebuild the sdcard image (please refer to [[IoTGateway/BSP/Linux/iMX6/Yocto_LBV6_User_Guide#To_build_sdcard_image|'''this''']] for details)
+
*rebuild the sdcard image (please refer to [[IoTGateway/BSP/Linux/iMX6/Yocto_LBV6_User_Guide#To_build_sdcard_image|'''this''']] for details)
<div style="margin-left: 2em;"><source lang="bash">
+
<div style="margin-left: 2em;"><syntaxhighlight lang="bash">
 
$ bitbake fsl-image-qt5
 
$ bitbake fsl-image-qt5
</source></div>
+
</syntaxhighlight></div>
 +
== Fonts ==
 +
 
 +
=== Chinese Font ===
  
==Fonts==
 
===Chinese Font===
 
 
The following operations demonstrate how to install Chinese font on Yocto Linux (RSB-4410 with 4410A1LIV6000).
 
The following operations demonstrate how to install Chinese font on Yocto Linux (RSB-4410 with 4410A1LIV6000).
* get the free Chinese font "WenQuanYi Micro Hei" from [[https://sourceforge.net/projects/wqy/files/wqy-microhei/ SourceForge]] and extract the tarball
+
 
 +
*get the free Chinese font "WenQuanYi Micro Hei" from [[https://sourceforge.net/projects/wqy/files/wqy-microhei/ SourceForge]] and extract the tarball
 
*put the <tt>'''wqy-microhei.ttc'''</tt> to <tt><span style="color:red">'''/usr/share/fonts/ttf'''</span></tt>, then execute the following commands
 
*put the <tt>'''wqy-microhei.ttc'''</tt> to <tt><span style="color:red">'''/usr/share/fonts/ttf'''</span></tt>, then execute the following commands
<div style="margin-left: 2em;"><source lang="bash">
+
<div style="margin-left: 2em;"><syntaxhighlight lang="bash">
 
  $ ln -s /usr/share/fonts/ttf/wqy-microhei.ttc /usr/lib/fonts/
 
  $ ln -s /usr/share/fonts/ttf/wqy-microhei.ttc /usr/lib/fonts/
 
  $ fc-cache -fv
 
  $ fc-cache -fv
</source></div>
+
</syntaxhighlight></div>
 
*use the the following command to check if the font is recognized.
 
*use the the following command to check if the font is recognized.
 
<div style="margin-left: 2em;">
 
<div style="margin-left: 2em;">
<source lang="bash">
+
 
 +
<syntaxhighlight lang="bash">
 
  $ fc-list
 
  $ fc-list
</source>
+
</syntaxhighlight>[[File:Fc-list.png|RTENOTITLE]] </div>
[[File:fc-list.png]]
+
*set the Chinese locale
</div>
+
 
* set the Chinese locale
+
 
:install the suitable locale if needed
 
:install the suitable locale if needed
<div style="margin-left: 3em;"><source lang="bash">
+
<div style="margin-left: 3em;"><syntaxhighlight lang="bash">
 
  $ rpm -ivh locale-base-zh-tw-2.21-r0.cortexa9hf_vfp_neon.rpm glibc-binary-localedata-zh-tw-2.21-r0.cortexa9hf_vfp_neon.rpm
 
  $ rpm -ivh locale-base-zh-tw-2.21-r0.cortexa9hf_vfp_neon.rpm glibc-binary-localedata-zh-tw-2.21-r0.cortexa9hf_vfp_neon.rpm
 
  $ rpm -ivh locale-base-zh-cn-2.21-r0.cortexa9hf_vfp_neon.rpm glibc-binary-localedata-zh-cn-2.21-r0.cortexa9hf_vfp_neon.rpm
 
  $ rpm -ivh locale-base-zh-cn-2.21-r0.cortexa9hf_vfp_neon.rpm glibc-binary-localedata-zh-cn-2.21-r0.cortexa9hf_vfp_neon.rpm
</source></div>
+
</syntaxhighlight></div>
 
:put the suitable LC_ALL setting to the /etc/profile
 
:put the suitable LC_ALL setting to the /etc/profile
 
<div style="margin-left: 3em;">
 
<div style="margin-left: 3em;">
<source lang="bash"> export LC_ALL=zh_TW.UTF-8 </source>
+
 
or
+
<syntaxhighlight lang="bash"> export LC_ALL=zh_TW.UTF-8 </syntaxhighlight>or<syntaxhighlight lang="bash"> export LC_ALL=zh_CN.UTF-8 </syntaxhighlight> </div>
<source lang="bash"> export LC_ALL=zh_CN.UTF-8 </source>
+
</div>
+
 
:reboot the target device
 
:reboot the target device
* verification
+
 
 +
*verification
 +
 
 
:plug in the USB stick that the following directories and files already existed
 
:plug in the USB stick that the following directories and files already existed
 
<div style="margin-left: 3em;">
 
<div style="margin-left: 3em;">
Line 177: Line 198:
 
</div>
 
</div>
 
:check if the keyword "utf8" is existed
 
:check if the keyword "utf8" is existed
<div style="margin-left: 3em;" source="bash">
+
<div style="margin-left: 3em;">
 
  $ mount
 
  $ mount
[[File:chinese_test_check_utf8.png]]
+
 
 +
[[File:Chinese test check utf8.png|RTENOTITLE]]
 
</div>
 
</div>
 
:if not, execute the following command then check again
 
:if not, execute the following command then check again
 
<div style="margin-left: 3em;">
 
<div style="margin-left: 3em;">
<source lang="bash">
+
 
 +
<syntaxhighlight lang="bash">
 
  $ umount /dev/sda1
 
  $ umount /dev/sda1
 
  $ mount -o iocharset=utf8 /dev/sda1 /run/media/sda1
 
  $ mount -o iocharset=utf8 /dev/sda1 /run/media/sda1
Line 189: Line 212:
 
  ## mount -o utf8 /dev/sda1 /run/media/sda1
 
  ## mount -o utf8 /dev/sda1 /run/media/sda1
 
  $ mount
 
  $ mount
</source>
+
</syntaxhighlight>[[File:Chinese test utf8.png|RTENOTITLE]]
[[File:chinese_test_utf8.png]]
+
 
+
 
or
 
or
  
[[File:chinese_test_utf8_2.png]]
+
[[File:Chinese test utf8 2.png|RTENOTITLE]]
 
</div>
 
</div>
 
:if it is, execute the following command to list the directories and files
 
:if it is, execute the following command to list the directories and files
<div style="margin-left: 3em;" source="bash">
+
<div style="margin-left: 3em;">
 
  $ ls -al /run/media/sda1/chinese_test/*
 
  $ ls -al /run/media/sda1/chinese_test/*
[[File:chinese_test_list.png]]
+
 
 +
[[File:Chinese test list.png|RTENOTITLE]]
 
</div>
 
</div>
 +
== GStreamer ==
 +
 +
=== Play Video ===
 +
 +
==== Audio Information ====
  
==GStreamer==
 
===Play Video===
 
====Audio Information====
 
 
*When the system is turned on, you can see the following audio information:
 
*When the system is turned on, you can see the following audio information:
 +
 
  ...
 
  ...
 
  ALSA device list:
 
  ALSA device list:
Line 212: Line 237:
 
  ...
 
  ...
  
====Frame Buffer Information====
+
==== Frame Buffer Information ====
 +
 
 
*After the system is turned on, you can type command to see frame buffer information. For example:
 
*After the system is turned on, you can type command to see frame buffer information. For example:
 +
 
1. Type command "ls /dev/video", you will see all frame buffer devices ID:
 
1. Type command "ls /dev/video", you will see all frame buffer devices ID:
 +
 
  $ video16  video17  video18  video19  video20
 
  $ video16  video17  video18  video19  video20
2. Type command "cat /sys/class/graphics/fb0/fsl_disp_dev_property", you will see frame buffer name:  
+
 
 +
2. Type command "cat /sys/class/graphics/fb0/fsl_disp_dev_property", you will see frame buffer name:
 +
 
 
  $ hdmi
 
  $ hdmi
  
Line 222: Line 252:
  
 
4. Type command "cat /sys/class/graphics/fb1/fsl_disp_dev_property", you will see frame buffer name:
 
4. Type command "cat /sys/class/graphics/fb1/fsl_disp_dev_property", you will see frame buffer name:
 +
 
  $ overlay
 
  $ overlay
  
Line 227: Line 258:
  
 
6. Type command "cat /sys/class/graphics/fb2/fsl_disp_dev_property", you will see frame buffer name:
 
6. Type command "cat /sys/class/graphics/fb2/fsl_disp_dev_property", you will see frame buffer name:
 +
 
  $ lcd
 
  $ lcd
  
Line 232: Line 264:
  
 
8. Type command "cat /sys/class/graphics/fb3/fsl_disp_dev_property", you will see frame buffer name:
 
8. Type command "cat /sys/class/graphics/fb3/fsl_disp_dev_property", you will see frame buffer name:
 +
 
  $ overlay
 
  $ overlay
  
Line 237: Line 270:
  
 
10. Type command "cat /sys/class/graphics/fb4/fsl_disp_dev_property", you will see frame buffer name:
 
10. Type command "cat /sys/class/graphics/fb4/fsl_disp_dev_property", you will see frame buffer name:
 +
 
  $ ldb
 
  $ ldb
  
 
11. The device ID of "ldb" frame buffer layer is "video20".
 
11. The device ID of "ldb" frame buffer layer is "video20".
  
====Play Video Command====
+
==== Play Video Command ====
* The format of display video command:
+
 
 +
*The format of display video command:
 +
 
 
  $ GST_COMMAND uri=file://VIDEO_PATH video-sink="VIDEO_COMMAND device=DISPLAY_ID" audio-sink="alsasink device=plughw:AUDIO_ID"
 
  $ GST_COMMAND uri=file://VIDEO_PATH video-sink="VIDEO_COMMAND device=DISPLAY_ID" audio-sink="alsasink device=plughw:AUDIO_ID"
  
====Play Video Command On Yocto 1.5====
+
==== Play Video Command On Yocto 1.5 ====
 +
 
 
1. For example:
 
1. For example:
 +
 
  GST_COMMAND = "gst-launch playbin2"
 
  GST_COMMAND = "gst-launch playbin2"
 
  VIDEO_PATH = "/tools/Advantech.avi"
 
  VIDEO_PATH = "/tools/Advantech.avi"
Line 253: Line 291:
 
  AUDIO_ID = "0"(audio-sgtl5000) or "1"(audio-hdmi)
 
  AUDIO_ID = "0"(audio-sgtl5000) or "1"(audio-hdmi)
 
  AUDIO = ""(Audio) or "volume=0"(No audio)
 
  AUDIO = ""(Audio) or "volume=0"(No audio)
 +
 
2. Play video with audio from sgtl5000 audio command:
 
2. Play video with audio from sgtl5000 audio command:
 +
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" audio-sink="alsasink device=plughw:0"
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" audio-sink="alsasink device=plughw:0"
 +
 
3. Play video with audio from HDMI audio command:
 
3. Play video with audio from HDMI audio command:
 +
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" audio-sink="alsasink device=plughw:1"
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" audio-sink="alsasink device=plughw:1"
 +
 
4. Play video with no audio command:
 
4. Play video with no audio command:
 +
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" \
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" \
 
   audio-sink="alsasink device=plughw:0" volume=0
 
   audio-sink="alsasink device=plughw:0" volume=0
Line 264: Line 308:
 
     audio-sink="alsasink device=plughw:1" volume=0
 
     audio-sink="alsasink device=plughw:1" volume=0
  
====Play Video Command On Yocto 1.7====
+
==== Play Video Command On Yocto 1.7 ====
 +
 
 
1. For example:
 
1. For example:
 +
 
  GST_COMMAND = "gst-launch playbin2" or "gst-launch-0.10 playbin2" or "gst-launch-1.0 playbin"
 
  GST_COMMAND = "gst-launch playbin2" or "gst-launch-0.10 playbin2" or "gst-launch-1.0 playbin"
 
  VIDEO_PATH = "/tools/Advantech.avi"
 
  VIDEO_PATH = "/tools/Advantech.avi"
Line 272: Line 318:
 
  AUDIO_ID = "0"(audio-sgtl5000) or "1"(audio-hdmi)
 
  AUDIO_ID = "0"(audio-sgtl5000) or "1"(audio-hdmi)
 
  AUDIO = ""(Audio) or "volume=0"(No audio)
 
  AUDIO = ""(Audio) or "volume=0"(No audio)
 +
 
2. Play video with audio from SGTL5000 audio command:
 
2. Play video with audio from SGTL5000 audio command:
 +
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink  device=plughw:0"
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink  device=plughw:0"
 
  or
 
  or
Line 278: Line 326:
 
  or
 
  or
 
  $ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink  device=plughw:0"
 
  $ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink  device=plughw:0"
 +
 
3. Play video with audio from HDMI audio command:
 
3. Play video with audio from HDMI audio command:
 +
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"
 
  or
 
  or
Line 284: Line 334:
 
  or
 
  or
 
  $ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"
 
  $ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"
 +
 
4. Play video with no audio command:
 
4. Play video with no audio command:
 +
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" \
 
  $ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" \
 
   audio-sink="alsasink device=plughw:0" volume=0
 
   audio-sink="alsasink device=plughw:0" volume=0
Line 291: Line 343:
 
   audio-sink="alsasink device=plughw:0" volume=0
 
   audio-sink="alsasink device=plughw:0" volume=0
  
====Play Video Command On Yocto 1.8====
+
==== Play Video Command On Yocto 1.8 ====
 +
 
 
1. For example:
 
1. For example:
 +
 
  GST_COMMAND = "gst-launch-1.0 playbin"
 
  GST_COMMAND = "gst-launch-1.0 playbin"
 
  VIDEO_PATH = "/tools/Advantech.avi"
 
  VIDEO_PATH = "/tools/Advantech.avi"
Line 299: Line 353:
 
  AUDIO_ID = "0"(audio-sgtl5000) or "1"(audio-hdmi)
 
  AUDIO_ID = "0"(audio-sgtl5000) or "1"(audio-hdmi)
 
  AUDIO = ""(Audio) or "volume=0"(No audio)
 
  AUDIO = ""(Audio) or "volume=0"(No audio)
 +
 
2. Play video with audio from SGTL5000 audio command:
 
2. Play video with audio from SGTL5000 audio command:
 +
 
  $ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:0"
 
  $ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:0"
 +
 
3. Play video with audio from HDMI audio command:
 
3. Play video with audio from HDMI audio command:
 +
 
  $ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"
 
  $ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"
 +
 
4. Play video with no audio command:
 
4. Play video with no audio command:
 +
 
  $ gst-launch-1.0 playbin uri=file://tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" \
 
  $ gst-launch-1.0 playbin uri=file://tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" \
 
   audio-sink="alsasink device=plughw:0" volume=0
 
   audio-sink="alsasink device=plughw:0" volume=0
Line 310: Line 370:
 
   audio-sink="alsasink device=plughw:1" volume=0
 
   audio-sink="alsasink device=plughw:1" volume=0
  
===SMPTE color bar===
+
=== SMPTE color bar ===
  gst-launch videotestsrc ! autovideosink
+
 
 +
  gst-launch videotestsrc&nbsp;! autovideosink
 +
 
 +
=== video rotation ===
 +
 
 +
gst-launch filesrc location=/tools/Advantech.avi typefind=true&nbsp;! aiurdemux name=demux demux.&nbsp;! \
 +
queue max-size-buffers=0 max-size-time=0&nbsp;! vpudec&nbsp;! mfw_v4lsink <span style="color:red">rotate=180</span> demux.&nbsp;! \
 +
queue max-size-buffers=0 max-size-time=0&nbsp;! beepdec&nbsp;! autoaudiosink
  
===video rotation===
 
gst-launch filesrc location=/tools/Advantech.avi typefind=true ! aiurdemux name=demux demux. ! \
 
queue max-size-buffers=0 max-size-time=0 ! vpudec ! mfw_v4lsink <span style="color:red">rotate=180</span> demux. ! \
 
queue max-size-buffers=0 max-size-time=0 ! beepdec ! autoaudiosink
 
 
:(valid rotate value: 0, 90, 180 or 270)
 
:(valid rotate value: 0, 90, 180 or 270)
:(While the angle of rotation is 90&deg; or 270&deg;, the maximum video resolution can not be larget than 1024*1024.)
+
:(While the angle of rotation is 90° or 270°, the maximum video resolution can not be larget than 1024*1024.)
 +
 
 +
or
  
or
 
 
  gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_isink <span style="color:red">rotation=0</span>"
 
  gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_isink <span style="color:red">rotation=0</span>"
 +
 
:(valid rotation value: 0~7)
 
:(valid rotation value: 0~7)
  
===webcam===
+
=== webcam ===
====realtime video====
+
 
  gst-launch v4l2src ! video/x-raw-yuv,width=640,height=480,framerate=20/1 ! autovideosink
+
==== realtime video ====
====take one snapshot====
+
 
  gst-launch v4l2src num-buffers=1 ! jpegenc ! filesink location=sample.jpeg
+
  gst-launch v4l2src&nbsp;! video/x-raw-yuv,width=640,height=480,framerate=20/1&nbsp;! autovideosink
====show one snapshot====
+
 
  VSALPHA=1 gst-launch filesrc location=sample.jpeg ! jpegdec ! imagefreeze ! mfw_isink
+
==== take one snapshot ====
 +
 
 +
  gst-launch v4l2src num-buffers=1&nbsp;! jpegenc&nbsp;! filesink location=sample.jpeg
 +
 
 +
==== show one snapshot ====
 +
 
 +
  VSALPHA=1 gst-launch filesrc location=sample.jpeg&nbsp;! jpegdec&nbsp;! imagefreeze&nbsp;! mfw_isink
 +
 
 +
=== network streaming ===
 +
 
 +
==== RTSP(unicast) ====
  
===network streaming===
 
====RTSP(unicast)====
 
 
sender (ip: 192.168.203.41)
 
sender (ip: 192.168.203.41)
  vlc -I rc H.264.mp4 --screen-fps=10 :screen-caching=100 --sout='#rtp{sdp=rtsp://8554/}' -vvv
+
 
 +
  vlc -I rc H.264.mp4 --screen-fps=10&nbsp;:screen-caching=100 --sout='#rtp{sdp=rtsp://8554/}' -vvv
  
 
receiver
 
receiver
 +
 
  gst-launch rtspsrc location=rtsp://192.168.203.41:8554 \
 
  gst-launch rtspsrc location=rtsp://192.168.203.41:8554 \
  latency=200 name=r  r. ! application/x-rtp,media=video ! \
+
  latency=200 name=r  r.&nbsp;! application/x-rtp,media=video&nbsp;! \
  queue max-size-buffers=0 max-size-time=0 ! rtph264depay ! \
+
  queue max-size-buffers=0 max-size-time=0&nbsp;! rtph264depay&nbsp;! \
  vpudec ! mfw_v4lsink sync=false async=false r. ! \
+
  vpudec&nbsp;! mfw_v4lsink sync=false async=false r.&nbsp;! \
  'application/x-rtp, media=(string)audio' ! queue max-size-buffers=0 max-size-time=0 ! \
+
  'application/x-rtp, media=(string)audio'&nbsp;! queue max-size-buffers=0 max-size-time=0&nbsp;! \
  rtpmp4gdepay ! beepdec ! alsasink sync=false async=false -vvv  
+
  rtpmp4gdepay&nbsp;! beepdec&nbsp;! alsasink sync=false async=false -vvv  
 +
 
 +
==== RTP(multicast) ====
  
====RTP(multicast)====
 
 
sender
 
sender
  vlc -I rc H.264.mp4 --screen-fps=10 :screen-caching=100 --sout='#rtp{mux=ts,dst=239.1.1.1,port=5004}' -vvv
+
 
 +
  vlc -I rc H.264.mp4 --screen-fps=10&nbsp;:screen-caching=100 --sout='#rtp{mux=ts,dst=239.1.1.1,port=5004}' -vvv
  
 
receiver
 
receiver
 +
 
  route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0  
 
  route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0  
 
  gst-launch  udpsrc uri=udp://239.1.1.1:5004 \
 
  gst-launch  udpsrc uri=udp://239.1.1.1:5004 \
 
  caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264"\
 
  caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264"\
  ! .recv_rtp_sink_0 gstrtpbin ! queue max-size-buffers=0 max-size-time=0 ! \
+
  ! .recv_rtp_sink_0 gstrtpbin&nbsp;! queue max-size-buffers=0 max-size-time=0&nbsp;! \
  rtpmp2tdepay ! mpegtsdemux name=tsdem tsdem. ! queue max-size-buffers=0 max-size-time=0 ! \
+
  rtpmp2tdepay&nbsp;! mpegtsdemux name=tsdem tsdem.&nbsp;! queue max-size-buffers=0 max-size-time=0&nbsp;! \
  vpudec ! mfw_isink sync=false tsdem. tsdem. ! queue max-size-buffers=0 max-size-time=0 ! \
+
  vpudec&nbsp;! mfw_isink sync=false tsdem. tsdem.&nbsp;! queue max-size-buffers=0 max-size-time=0&nbsp;! \
  beepdec ! alsasink sync=false -vvv
+
  beepdec &nbsp;! alsasink sync=false -vvv
 +
 
 +
== Java ==
  
==Java==
 
 
How to install Java
 
How to install Java
  
==Linux Kernel==
+
== Linux Kernel ==
===Get kernel configs from running OS===
+
 
 +
=== Get kernel configs from running OS ===
 +
 
 
You can get the .config file in running Linux OS by the following command.
 
You can get the .config file in running Linux OS by the following command.
 +
 
  # zcat /proc/config.gz > current.config
 
  # zcat /proc/config.gz > current.config
 +
 
Furthermore, this feature is enabled by ''CONFIG_IKCONFIG_PROC''.
 
Furthermore, this feature is enabled by ''CONFIG_IKCONFIG_PROC''.
  
===Debug kernel panic and oops===
+
=== Debug kernel panic and oops ===
To enable kernel symbols & debug information, you have to turn on these options and re-build kernel image.
+
 
Just remember to keep the '''vmlinux''' & '''System.map''' files for debugging. They should be located at kernel root folder.
+
To enable kernel symbols & debug information, you have to turn on these options and re-build kernel image. Just remember to keep the '''vmlinux''' & '''System.map''' files for debugging. They should be located at kernel root folder.
 +
 
 
  CONFIG_DEBUG_KERNEL=y
 
  CONFIG_DEBUG_KERNEL=y
 
  CONFIG_KALLSYMS=y
 
  CONFIG_KALLSYMS=y
Line 376: Line 460:
  
 
Here is an example of Oops case.
 
Here is an example of Oops case.
 +
 
  Unable to handle kernel NULL pointer dereference at virtual address 00000000
 
  Unable to handle kernel NULL pointer dereference at virtual address 00000000
 
  pgd = d8e3c000
 
  pgd = d8e3c000
Line 385: Line 470:
 
  <span style="color:red">PC is at dac_get_volsw+0x60/0x74</span>
 
  <span style="color:red">PC is at dac_get_volsw+0x60/0x74</span>
 
  LR is at dac_get_volsw+0x5c/0x74
 
  LR is at dac_get_volsw+0x5c/0x74
  <span style="color:red">pc : [<80558e68>]</span>    lr : [<80558e64>]    psr: 60070013
+
  <span style="color:red">pc&nbsp;: [<80558e68>]</span>    lr&nbsp;: [<80558e64>]    psr: 60070013
  sp : d8b6dea8  ip : 00000000  fp : d8617400
+
  sp&nbsp;: d8b6dea8  ip&nbsp;: 00000000  fp&nbsp;: d8617400
  r10: 7ef214f8  r9 : d8b6c000  r8 : d866e280
+
  r10: 7ef214f8  r9&nbsp;: d8b6c000  r8&nbsp;: d866e280
  r7 : d861757c  r6 : d8617600  r5 : d8948800  r4 : 00000000
+
  r7&nbsp;: d861757c  r6&nbsp;: d8617600  r5&nbsp;: d8948800  r4&nbsp;: 00000000
  r3 : 00000000  r2 : 00000000  r1 : 00000001  r0 : 0000e564
+
  r3&nbsp;: 00000000  r2&nbsp;: 00000000  r1&nbsp;: 00000001  r0&nbsp;: 0000e564
 
  Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
 
  Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
 
  Control: 10c53c7d  Table: 68e3c04a  DAC: 00000015
 
  Control: 10c53c7d  Table: 68e3c04a  DAC: 00000015
Line 413: Line 498:
  
 
1. Check the PC (Program Counter) to find out where crash occurs.
 
1. Check the PC (Program Counter) to find out where crash occurs.
 +
 
  PC is at dac_get_volsw+<span style="color:blue">0x60</span>/0x74
 
  PC is at dac_get_volsw+<span style="color:blue">0x60</span>/0x74
  
 
2. Grep dac_get_volsw() in System.map and get the symbol name address
 
2. Grep dac_get_volsw() in System.map and get the symbol name address
 +
 
  $ cd <kernel root folder>
 
  $ cd <kernel root folder>
 
  $ grep dac_get_volsw System.map
 
  $ grep dac_get_volsw System.map
 
  <span style="color:green">80558e08</span> t dac_get_volsw
 
  <span style="color:green">80558e08</span> t dac_get_volsw
  
'''Note:''' You can find the program counter is equaled to the sum of function entry address & offset.  
+
'''Note:''' You can find the program counter is equaled to the sum of function entry address & offset.
pc : [<<span style="color:red">80558e68</span>>] = <span style="color:green">80558e08</span> + <span style="color:blue">0x60</span>
+
  
 +
pc&nbsp;: [<<span style="color:red">80558e68</span>>] = <span style="color:green">80558e08</span> + <span style="color:blue">0x60</span>
  
 
3. Run addr2line to read the exact line number in source code.
 
3. Run addr2line to read the exact line number in source code.
 +
 
  $ arm-linux-gnueabi-addr2line -f -e vmlinux <span style="color:red">80558e68</span>
 
  $ arm-linux-gnueabi-addr2line -f -e vmlinux <span style="color:red">80558e68</span>
 
  dac_get_volsw
 
  dac_get_volsw
 
  /home/root/Projects/Linux/fsl-yocto-3.14.52_1.1.0/linux-imx/<span style="color:purple">sound/soc/codecs/sgtl5000.c:335</span>
 
  /home/root/Projects/Linux/fsl-yocto-3.14.52_1.1.0/linux-imx/<span style="color:purple">sound/soc/codecs/sgtl5000.c:335</span>
  
 +
4-1. In alternative way, you can run objdump to get the disassembly and source code mapping.
  
4-1. In alternative way, you can run objdump to get the disassembly and source code mapping.
 
 
  $ arm-linux-gnueabi-objdump -DS vmlinux > kernel.objdump
 
  $ arm-linux-gnueabi-objdump -DS vmlinux > kernel.objdump
  
 
'''Note:''' This step may take very long time to generate the dump file. So, maybe you can stop it, once you can find the function symbols in the file.
 
'''Note:''' This step may take very long time to generate the dump file. So, maybe you can stop it, once you can find the function symbols in the file.
 
  
 
4-2. Find dac_get_volsw() in ''kernel.objdump'', and check the pc address [<<span style="color:red">80558e68</span>>]. Then, you can find the problem occurs at the same line of source code.
 
4-2. Find dac_get_volsw() in ''kernel.objdump'', and check the pc address [<<span style="color:red">80558e68</span>>]. Then, you can find the problem occurs at the same line of source code.
 +
 
  <span style="color:green">80558e08</span> <dac_get_volsw>:
 
  <span style="color:green">80558e08</span> <dac_get_volsw>:
 
   *                      ------------------------------
 
   *                      ------------------------------
Line 451: Line 539:
 
  80558e60:      eb0501a0        bl      806994e8 <printk>
 
  80558e60:      eb0501a0        bl      806994e8 <printk>
 
         <span style="color:purple">'''printk("%d\n", *p);'''</span>
 
         <span style="color:purple">'''printk("%d\n", *p);'''</span>
  80558e64:      e30e0564        movw    r0, #58724     ; 0xe564
+
  80558e64:      e30e0564        movw    r0, #58724     &nbsp;; 0xe564
 
  <span style="color:red">80558e68</span>:      e5941000        ldr    r1, [r4]
 
  <span style="color:red">80558e68</span>:      e5941000        ldr    r1, [r4]
  80558e6c:      e3480080        movt    r0, #32896     ; 0x8080
+
  80558e6c:      e3480080        movt    r0, #32896     &nbsp;; 0x8080
 
  80558e70:      eb05019c        bl      806994e8 <printk>
 
  80558e70:      eb05019c        bl      806994e8 <printk>
  
==NFS==
+
== NFS ==
===boot up to Linux===
+
 
 +
=== boot up to Linux ===
 +
 
 
The following operations demonstrate how to boot-up RSB-4410(4410LBV3480/4410LBV2080) with loading kernel image and mounting the root filesystem via NFS.
 
The following operations demonstrate how to boot-up RSB-4410(4410LBV3480/4410LBV2080) with loading kernel image and mounting the root filesystem via NFS.
* prerequisites for NFS server (e.g. ip: 172.22.15.145)
+
 
 +
*prerequisites for NFS server (e.g. ip: 172.22.15.145)
 
**NFS root
 
**NFS root
*:*add the following line to <tt>/etc/exports</tt>
+
*:
*::<tt><small><pre>/NFS *(rw,sync,wdelay,hide,nocrossmnt,insecure,no_root_squash,no_all_squash,subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)</pre></small></tt>
+
*add the following line to <tt>/etc/exports</tt>
 +
*::<pre><tt><small>/NFS *(rw,sync,wdelay,hide,nocrossmnt,insecure,no_root_squash,no_all_squash,subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)</small></tt></pre>
 +
 
 
*:*execute the following command to export all directories
 
*:*execute the following command to export all directories
 
*::<tt>$ sudo exportfs -a</tt>
 
*::<tt>$ sudo exportfs -a</tt>
Line 472: Line 565:
 
*::*copy the <tt>uImage</tt> (which <span style="color:red">CONFIG_ROOT_NFS</span> is set) to <tt>/NFS/4410lbv2</tt>
 
*::*copy the <tt>uImage</tt> (which <span style="color:red">CONFIG_ROOT_NFS</span> is set) to <tt>/NFS/4410lbv2</tt>
 
*::*set the following lines to <tt>/NFS/4410lbv2/etc/rc.d/rc.conf</tt>
 
*::*set the following lines to <tt>/NFS/4410lbv2/etc/rc.d/rc.conf</tt>
<div style="margin-left: 6em;"><small><source lang="text">
+
<div style="margin-left: 6em;"><syntaxhighlight lang="null">
 
export DEPLOYMENT_STYLE="NFS"
 
export DEPLOYMENT_STYLE="NFS"
 
export IPADDR0="dhcp"
 
export IPADDR0="dhcp"
</source></small></div>
+
</syntaxhighlight></div>
* u-boot
+
*u-boot
 +
 
 
:Hit any key to stop autoboot then perform the following commands:
 
:Hit any key to stop autoboot then perform the following commands:
 
::<u>for 4410LBV3480</u>
 
::<u>for 4410LBV3480</u>
<div style="margin-left: 4em;"><source lang="text">
+
<div style="margin-left: 4em;"><syntaxhighlight lang="text">
 
> setenv serverip 172.22.15.145; setenv autoload n; dhcp
 
> setenv serverip 172.22.15.145; setenv autoload n; dhcp
 
> setenv nfsroot /NFS/rsb-4410_rootfs
 
> setenv nfsroot /NFS/rsb-4410_rootfs
Line 486: Line 580:
 
> nfs ${fdt_addr} ${nfsroot}/${fdt_file}
 
> nfs ${fdt_addr} ${nfsroot}/${fdt_file}
 
> bootm ${loadaddr} - ${fdt_addr}
 
> bootm ${loadaddr} - ${fdt_addr}
</source></div>
+
</syntaxhighlight></div>
 
::<u>for 4410LBV2080</u>
 
::<u>for 4410LBV2080</u>
<div style="margin-left: 4em;"><source lang="text">
+
<div style="margin-left: 4em;"><syntaxhighlight lang="text">
 
> setenv serverip 172.22.15.145; setenv autoload n; dhcp
 
> setenv serverip 172.22.15.145; setenv autoload n; dhcp
 
> setenv nfsroot /NFS/4410lbv2
 
> setenv nfsroot /NFS/4410lbv2
Line 495: Line 589:
 
> nfs ${loadaddr} ${nfsroot}/uImage
 
> nfs ${loadaddr} ${nfsroot}/uImage
 
> bootm
 
> bootm
</source></div>
+
</syntaxhighlight></div>
* screenshot
+
*screenshot
 +
 
 
::<u>for 4410LBV3480</u>
 
::<u>for 4410LBV3480</u>
:::[[File:rsb-4410_booting_from_network.png|800px]]
+
:::[[File:Rsb-4410 booting from network.png|800px|Rsb-4410 booting from network.png]]
 
::<u>for 4410LBV2080</u>
 
::<u>for 4410LBV2080</u>
:::[[File:rsb-4410_lbv2080_booting_from_network.png|800px]]
+
:::[[File:Rsb-4410 lbv2080 booting from network.png|800px|Rsb-4410 lbv2080 booting from network.png]]
 +
 
 +
=== boot up to U-Boot ===
  
===boot up to U-Boot===
 
 
The following operations demonstrate how to boot-up RSB-4410(4410LBV3480) with loading u-boot via NFS.
 
The following operations demonstrate how to boot-up RSB-4410(4410LBV3480) with loading u-boot via NFS.
* Keep the DEL key pressed in terminal emulator, then reset RSB-4410.
+
 
* While <tt>"SPL >"</tt> shows up, release the DEL key, and type <tt>"CTRL+C"</tt> in terminal emulator to clear all invisible keystrokes.
+
*Keep the DEL key pressed in terminal emulator, then reset RSB-4410.
* SPL
+
*While <tt>"SPL >"</tt> shows up, release the DEL key, and type <tt>"CTRL+C"</tt> in terminal emulator to clear all invisible keystrokes.
<div style="margin-left: 2em;"><source lang="text">
+
*SPL
 +
<div style="margin-left: 2em;"><syntaxhighlight lang="text">
 
> setenv serverip 172.22.15.145
 
> setenv serverip 172.22.15.145
 
> dhcp
 
> dhcp
 
> nfs ${loadaddr} /NFS/rsb-4410_rootfs/u-boot_crc.bin
 
> nfs ${loadaddr} /NFS/rsb-4410_rootfs/u-boot_crc.bin
 
> go ${loadaddr}
 
> go ${loadaddr}
</source></div>
+
</syntaxhighlight></div>
* Screenshot
+
*Screenshot
:[[File:rsb-4410_boot_up_to_U-Boot.png|640px]]
+
 
 +
:[[File:Rsb-4410 boot up to U-Boot.png|640px|Rsb-4410 boot up to U-Boot.png]]
 +
 
 +
== OpenCV ==
  
==OpenCV==
 
 
Open source computer vision
 
Open source computer vision
  
==Python==
+
== Python ==
 +
 
 
Install Python
 
Install Python
  
==Qt==
+
== Qt ==
===Writing the Qt application with displaying Chinese===
+
 
 +
=== Writing the Qt application with displaying Chinese ===
 +
 
 
The section will demonstrate how to install Chinese font, and let Qt application to display Chinese; all operations are performed with RSB-4410 (4410A1LIV6000) and Ubuntu 12.04.
 
The section will demonstrate how to install Chinese font, and let Qt application to display Chinese; all operations are performed with RSB-4410 (4410A1LIV6000) and Ubuntu 12.04.
* install Chinese font
+
 
 +
*install Chinese font
 +
 
 
:On target side (RSB-4410)
 
:On target side (RSB-4410)
::Please refer to [[#Chinese_Font | '''this''']] for details.
+
::Please refer to [[#Chinese_Font|'''this''']] for details.
  
 
:On host side (Ubuntu 12.04)
 
:On host side (Ubuntu 12.04)
Line 535: Line 639:
 
</div>
 
</div>
 
*start QtCreator (on host side)
 
*start QtCreator (on host side)
 +
 
::create one project named hello_qt that contains one label which text is "哈囉 Qt" and font is "WenQuanYi Micro Hei, 72"
 
::create one project named hello_qt that contains one label which text is "哈囉 Qt" and font is "WenQuanYi Micro Hei, 72"
 
:::(please refer to [[IoTGateway/BSP/Linux/iMX6/QtCreator|'''how to Setting-up QtCreator to cross compile for iMX6 series''']] if needed)
 
:::(please refer to [[IoTGateway/BSP/Linux/iMX6/QtCreator|'''how to Setting-up QtCreator to cross compile for iMX6 series''']] if needed)
:::[[File:hello_qt_chinese.png|800px]]
+
:::[[File:Hello qt chinese.png|800px|Hello qt chinese.png]]
 
::build , deploy and run
 
::build , deploy and run
:::[[File:hello_qt_build_deploy_run.png]]
+
:::[[File:Hello qt build deploy run.png|RTENOTITLE]]
:::[[File:hello_qt_runtime.png]]
+
:::[[File:Hello qt runtime.png|RTENOTITLE]]
 +
 
 +
== SSH ==
  
==SSH==
 
 
SSH connection
 
SSH connection
  
==TFTP==
+
== TFTP ==
===boot up to Linux===
+
 
 +
=== boot up to Linux ===
 +
 
 
The following operations demonstrate how to boot-up RSB-4410(4410LBV3480/4410LBV2080) with loading kernel image via TFTP and mounting the root filesystem via NFS.
 
The following operations demonstrate how to boot-up RSB-4410(4410LBV3480/4410LBV2080) with loading kernel image via TFTP and mounting the root filesystem via NFS.
* prerequisites for NFS server (This section is identical with the one of '''[[IoTGateway/Features/Linux/Software#NFS|NFS]]'''.)
+
 
* prerequisites for TFTP server (e.g. ip: 172.22.15.145)
+
*prerequisites for NFS server (This section is identical with the one of '''[[IoTGateway/Features/Linux/Software#NFS|NFS]]'''.)
:*<tt>/etc/xinetd.d/tftp</tt>
+
*prerequisites for TFTP server (e.g. ip: 172.22.15.145)
<div style="margin-left: 4em;"><source lang="text">
+
 
 +
:
 +
*<tt>/etc/xinetd.d/tftp</tt>
 +
<div style="margin-left: 4em;"><syntaxhighlight lang="text">
 
service tftp
 
service tftp
 
{
 
{
Line 562: Line 673:
 
     disable        = no
 
     disable        = no
 
}
 
}
</source></div>
+
</syntaxhighlight></div>
:*<tt>/etc/services</tt>
+
:
<div style="margin-left: 4em;"><source lang="text">
+
*<tt>/etc/services</tt>
 +
<div style="margin-left: 4em;"><syntaxhighlight lang="text">
 
tftp            69/tcp
 
tftp            69/tcp
 
tftp            69/udp
 
tftp            69/udp
</source></div>
+
</syntaxhighlight></div>
:*restart the xinetd service
+
:
* u-boot
+
*restart the xinetd service
 +
 
 +
*u-boot
 +
 
 
:Hit any key to stop autoboot then perform the following commands:
 
:Hit any key to stop autoboot then perform the following commands:
 
::<u>for 4410LBV3480</u>
 
::<u>for 4410LBV3480</u>
<div style="margin-left: 4em;"><source lang="text">
+
<div style="margin-left: 4em;"><syntaxhighlight lang="text">
 
> setenv serverip 172.22.15.145
 
> setenv serverip 172.22.15.145
 
> setenv nfsroot /NFS/rsb-4410_rootfs
 
> setenv nfsroot /NFS/rsb-4410_rootfs
 
> run netboot
 
> run netboot
</source></div>
+
</syntaxhighlight></div>
 
::<u>for 4410LBV2080</u>
 
::<u>for 4410LBV2080</u>
<div style="margin-left: 4em;"><source lang="text">
+
<div style="margin-left: 4em;"><syntaxhighlight lang="text">
 
> setenv serverip 172.22.15.145; setenv autoload n; dhcp
 
> setenv serverip 172.22.15.145; setenv autoload n; dhcp
 
> setenv nfsroot /NFS/4410lbv2
 
> setenv nfsroot /NFS/4410lbv2
 
> setenv bootargs_base ${bootargs_base} 'fec_mac=${ethaddr}'
 
> setenv bootargs_base ${bootargs_base} 'fec_mac=${ethaddr}'
 
> run bootcmd_net
 
> run bootcmd_net
</source></div>
+
</syntaxhighlight></div>
 +
== Yocto ==
  
==Yocto==
 
 
In this section, we share some tips to use & modify BB files and related configurations for Yocto.
 
In this section, we share some tips to use & modify BB files and related configurations for Yocto.
===How to delete temporary workspace after build process===
+
 
By default, the build system preserves the temporary files under the '''${TMPDIR}/work''' directory of each recipe for inspection and possible debugging purposes. If you would rather have these files deleted to save disk space as the build progresses, you can enable rm_work by adding the following to your '''local.conf file''', which is found in the Build Directory.  
+
=== How to delete temporary workspace after build process ===
 +
 
 +
By default, the build system preserves the temporary files under the '''${TMPDIR}/work''' directory of each recipe for inspection and possible debugging purposes. If you would rather have these files deleted to save disk space as the build progresses, you can enable rm_work by adding the following to your '''local.conf file''', which is found in the Build Directory.
 +
 
 
  INHERIT += "rm_work"
 
  INHERIT += "rm_work"
  
 
To exclude some recipes from having their work directories deleted by rm_work, you can add the names of the recipe or recipes you are working on to the RM_WORK_EXCLUDE variable, which can also be set in your local.conf file. Here is an example:
 
To exclude some recipes from having their work directories deleted by rm_work, you can add the names of the recipe or recipes you are working on to the RM_WORK_EXCLUDE variable, which can also be set in your local.conf file. Here is an example:
 +
 
  RM_WORK_EXCLUDE += "busybox glibc"
 
  RM_WORK_EXCLUDE += "busybox glibc"
  
===How to get multi-sources from GIT server===
+
=== How to get multi-sources from GIT server ===
You can assign a '''name''' to distinguish the different GIT URIs, and define different '''destsuffix''' to save them respectively.
+
 
Furthermore, to override SRCREV with the '''name''', you can assign different commit id for each GIT branch.
+
You can assign a '''name''' to distinguish the different GIT URIs, and define different '''destsuffix''' to save them respectively. Furthermore, to override SRCREV with the '''name''', you can assign different commit id for each GIT branch.
  
 
  SRC_URI = " \
 
  SRC_URI = " \
     <nowiki>git://git.allseenalliance.org/gerrit/core/alljoyn.git</nowiki>;protocol=https;branch=${GIT_BRANCH};'''name'''=<span style="color:red">router</span>;'''destsuffix'''=git/core/alljoyn \    
+
      
    <nowiki>git://git.allseenalliance.org/gerrit/services/base.git</nowiki>;protocol=https;branch=${GIT_BRANCH};'''name'''=<span style="color:blue">services</span>;'''destsuffix'''=git/services/base \
+
<nowiki>git://git.allseenalliance.org/gerrit/core/alljoyn.git</nowiki>
    file://modify_flags_for_yocto.patch"
+
;protocol=https;branch=${GIT_BRANCH};'''name'''=<span style="color:red">router</span>;'''destsuffix'''=git/core/alljoyn \<nowiki>git://git.allseenalliance.org/gerrit/services/base.git</nowiki>
SRCREV_<span style="color:red">router</span> = "0d71b216bb3a3cadc615c3eda6f8200093c5e117"
+
;protocol=https;branch=${GIT_BRANCH};'''name'''=<span style="color:blue">services</span>;'''destsuffix'''=git/services/base \ file://modify_flags_for_yocto.patch" SRCREV_<span style="color:red">router</span> = "0d71b216bb3a3cadc615c3eda6f8200093c5e117" SRCREV_<span style="color:blue">services</span> = "403cda579242701d42d2d7c0da308d63a8f46070"
SRCREV_<span style="color:blue">services</span> = "403cda579242701d42d2d7c0da308d63a8f46070"
+
=== Skip QA check ===
  
===Skip QA check===
 
 
You can skip the specific QA check for your packages. For details, check the [https://www.yoctoproject.org/docs/2.0/ref-manual/ref-manual.html#ref-classes-insane insane.bbclass] bbclass in Yocto Project Reference Manual.
 
You can skip the specific QA check for your packages. For details, check the [https://www.yoctoproject.org/docs/2.0/ref-manual/ref-manual.html#ref-classes-insane insane.bbclass] bbclass in Yocto Project Reference Manual.
 +
 
  INSANE_SKIP_${PN} += "dev-so"
 
  INSANE_SKIP_${PN} += "dev-so"
  
===Create BB file to install pre-built SO binaries===
+
=== Create BB file to install pre-built SO binaries ===
 +
 
 
Below is an example to add SO binaries into your image. You may need to modify the <span style="color:blue">blue items</span> for your make install path & library name.
 
Below is an example to add SO binaries into your image. You may need to modify the <span style="color:blue">blue items</span> for your make install path & library name.
 +
 
  SRC_URI = "file://test.tar.gz"
 
  SRC_URI = "file://test.tar.gz"
 
   
 
   
Line 632: Line 753:
 
   RPROVIDES_${PN} = "<span style="color:blue">libtest-1.00.so</span>"
 
   RPROVIDES_${PN} = "<span style="color:blue">libtest-1.00.so</span>"
  
===Install Node-RED packages===
+
=== Install Node-RED packages ===
 +
 
 
For Node-RED package installation, you can refer to the example below. Please note this example is based on the imyller's [https://github.com/imyller/meta-nodejs meta-nodejs] layer for Node.js infrastructure.
 
For Node-RED package installation, you can refer to the example below. Please note this example is based on the imyller's [https://github.com/imyller/meta-nodejs meta-nodejs] layer for Node.js infrastructure.
SRC_URI =  "<nowiki>git://github.com/ADVANTECH-Corp/node-red-contrib-alljoyn.git</nowiki>;protocol=git"
 
SRCREV = "677333b1ed1a26a966c32d98af073d0b9a2b9088"
 
 
S = "${WORKDIR}/git"
 
 
<span style="color:green"># Inherit NPM class</span>
 
inherit npm-install-global
 
 
<span style="color:green"># Do node-gyp rebuild in do_install() phase</span>
 
NPM_INSTALL_FLAGS = "--unsafe-perm"
 
 
<span style="color:green"># Skip QA check</span>
 
INSANE_SKIP_${PN} = "staticdev"
 
  
===How to add additional gst-plugins===
+
SRC_URI =  "
* add new settings in Yocto's <tt>conf/local.conf</tt>
+
<nowiki>git://github.com/ADVANTECH-Corp/node-red-contrib-alljoyn.git</nowiki>
<div style="margin-left: 2em;"><source lang="bash">
+
;protocol=git" SRCREV = "677333b1ed1a26a966c32d98af073d0b9a2b9088" S = "${WORKDIR}/git" <span style="color:green"># Inherit NPM class</span> inherit npm-install-global <span style="color:green"># Do node-gyp rebuild in do_install() phase</span> NPM_INSTALL_FLAGS = "--unsafe-perm" <span style="color:green"># Skip QA check</span> INSANE_SKIP_${PN} = "staticdev"
 +
=== How to add additional gst-plugins ===
 +
 
 +
*add new settings in Yocto's <tt>conf/local.conf</tt>
 +
<div style="margin-left: 2em;"><syntaxhighlight lang="bash">
 
LICENSE_FLAGS_WHITELIST = "commercial"
 
LICENSE_FLAGS_WHITELIST = "commercial"
  
Line 667: Line 780:
 
gst-ffmpeg \
 
gst-ffmpeg \
 
"
 
"
</source></div>
+
</syntaxhighlight></div>
 
+
*overwrite original hash code specified in the recipe <tt>x264_git</tt>
* overwrite original hash code specified in the recipe <tt>x264_git</tt>
+
<div style="margin-left: 2em;"><syntaxhighlight lang="bash">
<div style="margin-left: 2em;"><source lang="bash">
+
 
cat << EOF > meta-advantech/recipes-multimedia/x264/x264_git.bbappend
 
cat << EOF > meta-advantech/recipes-multimedia/x264/x264_git.bbappend
 
SRCREV = "ffc3ad4945da69f3caa2b40e4eed715a9a8d9526"
 
SRCREV = "ffc3ad4945da69f3caa2b40e4eed715a9a8d9526"
 
EOF
 
EOF
</source></div>
+
</syntaxhighlight></div>
 +
*snapshot verified
  
* snapshot verified
+
:[[File:Additional gst-plugins verified.png|RTENOTITLE]]
:[[File:additional_gst-plugins_verified.png]]
+
 
 +
=== How to use Yocto Project Application Development Toolkit (ADT) ===
  
===How to use Yocto Project Application Development Toolkit (ADT)===
 
 
(see [[IoTGateway/BSP/Linux/iMX6/Eclipse_Plug-in|Setting-up Eclipse Plug-in to cross compile for iMX6 series]])
 
(see [[IoTGateway/BSP/Linux/iMX6/Eclipse_Plug-in|Setting-up Eclipse Plug-in to cross compile for iMX6 series]])
  
===How to add & use Chromium browser===
+
=== How to add & use Chromium browser ===
* add new settings in <tt>conf/local.conf</tt>
+
 
<div style="margin-left: 2em;"><source lang="bash">
+
*add new settings in <tt>conf/local.conf</tt>
 +
<div style="margin-left: 2em;"><syntaxhighlight lang="bash">
 
LICENSE_FLAGS_WHITELIST = "commercial"
 
LICENSE_FLAGS_WHITELIST = "commercial"
 
CORE_IMAGE_EXTRA_INSTALL += "chromium"
 
CORE_IMAGE_EXTRA_INSTALL += "chromium"
</source></div>
+
</syntaxhighlight></div>
 +
*switch "OpenGL ES H/W acceleration" on
  
* switch "OpenGL ES H/W acceleration" on
 
 
:edit <tt>/usr/share/applications/google-chrome.desktop</tt>
 
:edit <tt>/usr/share/applications/google-chrome.desktop</tt>
 
<div style="margin-left: 2em;">
 
<div style="margin-left: 2em;">
 
  [Desktop Entry]
 
  [Desktop Entry]
 
  ...
 
  ...
  Exec=/usr/bin/google-chrome <span style="color:red">--use-gl=egl</span> %U
+
  Exec=/usr/bin/google-chrome <span style="color:red">--use-gl=egl</span>&nbsp;%U
 
  ...
 
  ...
 
</div>
 
</div>
* HTML5 scores
+
*HTML5 scores
:[[File:chromium_html5_scores.png]]
+
 
:[[File:chromium_html5_details.png]]
+
:[[File:Chromium html5 scores.png|RTENOTITLE]]
 +
:[[File:Chromium html5 details.png|RTENOTITLE]]
 +
 
 +
== CC2650 Sensortag ==
 +
CC2650STK – Multi standard supporting Bluetooth low energy, 6LoWPAN, and ZigBee.
 +
These web pages provides gives details for CC2650
 +
[[ http://processors.wiki.ti.com/index.php/SensorTag2015|SensorTag2015]]
 +
[[ http://www.ti.com/ww/en/wireless_connectivity/sensortag/index.html|CC2650 SensorTag User's Guide]]

Revision as of 07:07, 16 May 2017


Console

How to enable framebuffer console

The following operations are performed with RSB-4410(4410LBV2080)

  • linux kernel config


Device Drivers --->
Graphics support --->
<*> Framebuffer Console support


  • u-boot
setenv bootargs_base 'setenv bootargs console=ttymxc0,115200 console=tty0 enable_wait_mode=off video_mode=extension
  • files need to be updated
/etc/inittab
tty0::respawn:-/bin/bash

Notice:

If the kernel config is set to "<M> Framebuffer Console support", console will show up after module ,fbcon, is loaded.

How to change debug console port

The following operations demonstrate how to change UBC-DS31's(based on DS31LBV1150) debug console from UART1(ttymxc0) to UART2(ttymxc1).

  • u-boot
include/configs/mx6q_ubc-d31_recovery.h
#define CONFIG_UART_BASE_ADDR   UART2_BASE_ADDR
include/configs/mx6q_ubc-d31_1G_recovery.h
modify the settings of bootargs_base contained in the pre-defined macro #define CONFIG_EXTRA_ENV_SETTINGS
console=ttymxc1,115200
board/freescale/mx6q_ubc-d31/mx6q_ubc-d31.c
insert the following two lines into static void setup_uart(void)
mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D27__UART2_TXD);
mxc_iomux_v3_setup_pad(MX6Q_PAD_EIM_D27__UART2_RXD);
  • linux kernel
arch/arm/mach-mx6/board-mx6q_advantech.c
modify the following two lines in static void __init mx6_sabresd_timer_init(void)
uart_clk = clk_get_sys("imx-uart.1", NULL);
early_console_setup(UART2_BASE_ADDR, uart_clk);

How to disable debug console

The following operations demonstrate how to disable UBC-DS31's(based on DS31LBV1150) debug console.

  • u-boot
board/freescale/mx6q_ubc-d31/mx6q_ubc-d31.c
comment out all the code within static void setup_uart(void)
common/console.c
modify the following line in int console_init_f(void)
gd->have_console = 0;
  • u-boot environment variable
setenv silent=y

change console setting, console=none, within bootargs_base

  • linux kernel config


Device Drivers ---> Character devices ---> Serial drivers --->
[*] IMX serial port support
[ ] Support 4 IMX serial ports
[ ] Console on IMX serial port


  • linux kernel (recommended)
arch/arm/boot/compressed/misc.c
comment out the following lines in void decompress_kernel (...
//putstr("Uncompressing Linux...");
/*
if (ret)
        error("decompressor returned an error");
else
        putstr(" done, booting the kernel.\n");
*/
  • target root file system
comment out the following line in /etc/inittab
#::respawn:/etc/rc.d/rc_mxc.S

Device Tree

Customize device tree

File System

NTFS

The following operations demonstrate how to add NTFS support for Yocto Linux (ROM-5420 with imx6LBV6120_2016-06-14).

  • linux kernel config (please refer to this for details)


File systems --->
DOS/FAT/NT Filesystems --->
<*> NTFS file system support


  • BSP
add one line to meta-advantech/recipes-fsl/images/fsl-image-adv.inc
IMAGE_INSTALL += " fuse ntfs-3g ntfs-3g-ntfsprogs "
  • rebuild the sdcard image (please refer to this for details)
$ bitbake fsl-image-qt5

Fonts

Chinese Font

The following operations demonstrate how to install Chinese font on Yocto Linux (RSB-4410 with 4410A1LIV6000).

  • get the free Chinese font "WenQuanYi Micro Hei" from [SourceForge] and extract the tarball
  • put the wqy-microhei.ttc to /usr/share/fonts/ttf, then execute the following commands
 $ ln -s /usr/share/fonts/ttf/wqy-microhei.ttc /usr/lib/fonts/
 $ fc-cache -fv
  • use the the following command to check if the font is recognized.
 $ fc-list
RTENOTITLE
  • set the Chinese locale
install the suitable locale if needed
 $ rpm -ivh locale-base-zh-tw-2.21-r0.cortexa9hf_vfp_neon.rpm glibc-binary-localedata-zh-tw-2.21-r0.cortexa9hf_vfp_neon.rpm
 $ rpm -ivh locale-base-zh-cn-2.21-r0.cortexa9hf_vfp_neon.rpm glibc-binary-localedata-zh-cn-2.21-r0.cortexa9hf_vfp_neon.rpm
put the suitable LC_ALL setting to the /etc/profile
 export LC_ALL=zh_TW.UTF-8
or
 export LC_ALL=zh_CN.UTF-8
reboot the target device
  • verification
plug in the USB stick that the following directories and files already existed
chinese_test/
 繁體目錄/
  繁體檔案
chinese_test/
 简体目录/
  简体档案
check if the keyword "utf8" is existed
$ mount

RTENOTITLE

if not, execute the following command then check again
 $ umount /dev/sda1
 $ mount -o iocharset=utf8 /dev/sda1 /run/media/sda1
 ## NOTICE: the following format also works
 ## mount -o utf8 /dev/sda1 /run/media/sda1
 $ mount
RTENOTITLE

or

RTENOTITLE

if it is, execute the following command to list the directories and files
$ ls -al /run/media/sda1/chinese_test/*

RTENOTITLE

GStreamer

Play Video

Audio Information

  • When the system is turned on, you can see the following audio information:
...
ALSA device list:
 #0: imx-audio-sgtl5000
 #1: imx-hdmi-soc
...

Frame Buffer Information

  • After the system is turned on, you can type command to see frame buffer information. For example:

1. Type command "ls /dev/video", you will see all frame buffer devices ID:

$ video16  video17  video18  video19  video20

2. Type command "cat /sys/class/graphics/fb0/fsl_disp_dev_property", you will see frame buffer name:

$ hdmi

3. The device ID of "hdmi" frame buffer layer is "video16".

4. Type command "cat /sys/class/graphics/fb1/fsl_disp_dev_property", you will see frame buffer name:

$ overlay

5. The device ID of "hdmi" overlay layer is "video17".

6. Type command "cat /sys/class/graphics/fb2/fsl_disp_dev_property", you will see frame buffer name:

$ lcd

7. The device ID of "lcd" frame buffer layer is "video18".

8. Type command "cat /sys/class/graphics/fb3/fsl_disp_dev_property", you will see frame buffer name:

$ overlay

9. The device ID of "lcd" overlay layer is "video19".

10. Type command "cat /sys/class/graphics/fb4/fsl_disp_dev_property", you will see frame buffer name:

$ ldb

11. The device ID of "ldb" frame buffer layer is "video20".

Play Video Command

  • The format of display video command:
$ GST_COMMAND uri=file://VIDEO_PATH video-sink="VIDEO_COMMAND device=DISPLAY_ID" audio-sink="alsasink device=plughw:AUDIO_ID"

Play Video Command On Yocto 1.5

1. For example:

GST_COMMAND = "gst-launch playbin2"
VIDEO_PATH = "/tools/Advantech.avi"
VIDEO_COMMAND = "mfw_v4lsink"
DISPLAY_ID = "/dev/video17"(hdmi overlay layer)
AUDIO_ID = "0"(audio-sgtl5000) or "1"(audio-hdmi)
AUDIO = ""(Audio) or "volume=0"(No audio)

2. Play video with audio from sgtl5000 audio command:

$ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" audio-sink="alsasink device=plughw:0"

3. Play video with audio from HDMI audio command:

$ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" audio-sink="alsasink device=plughw:1"

4. Play video with no audio command:

$ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" \
  audio-sink="alsasink device=plughw:0" volume=0
or
$ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_v4lsink device=/dev/video17" \
   audio-sink="alsasink device=plughw:1" volume=0

Play Video Command On Yocto 1.7

1. For example:

GST_COMMAND = "gst-launch playbin2" or "gst-launch-0.10 playbin2" or "gst-launch-1.0 playbin"
VIDEO_PATH = "/tools/Advantech.avi"
VIDEO_COMMAND = "imxv4l2sink"
DISPLAY_ID = "/dev/video17"(hdmi overlay layer)
AUDIO_ID = "0"(audio-sgtl5000) or "1"(audio-hdmi)
AUDIO = ""(Audio) or "volume=0"(No audio)

2. Play video with audio from SGTL5000 audio command:

$ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink  device=plughw:0"
or
$ gst-launch-0.10 playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink  device=plughw:0"
or
$ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink  device=plughw:0"

3. Play video with audio from HDMI audio command:

$ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"
or
$ gst-launch-0.10 playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"
or
$ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"

4. Play video with no audio command:

$ gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" \
  audio-sink="alsasink device=plughw:0" volume=0
or
$ gst-launch-1.0 playbin uri=file://tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" \
  audio-sink="alsasink device=plughw:0" volume=0

Play Video Command On Yocto 1.8

1. For example:

GST_COMMAND = "gst-launch-1.0 playbin"
VIDEO_PATH = "/tools/Advantech.avi"
VIDEO_COMMAND = "imxv4l2sink"
DISPLAY_ID = "/dev/video17"(hdmi overlay layer)
AUDIO_ID = "0"(audio-sgtl5000) or "1"(audio-hdmi)
AUDIO = ""(Audio) or "volume=0"(No audio)

2. Play video with audio from SGTL5000 audio command:

$ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:0"

3. Play video with audio from HDMI audio command:

$ gst-launch-1.0 playbin uri=file:///tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" audio-sink="alsasink device=plughw:1"

4. Play video with no audio command:

$ gst-launch-1.0 playbin uri=file://tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" \
  audio-sink="alsasink device=plughw:0" volume=0
or
$ gst-launch-1.0 playbin uri=file://tools/Advantech.avi video-sink="imxv4l2sink device=/dev/video17" \
  audio-sink="alsasink device=plughw:1" volume=0

SMPTE color bar

gst-launch videotestsrc ! autovideosink

video rotation

gst-launch filesrc location=/tools/Advantech.avi typefind=true ! aiurdemux name=demux demux. ! \
queue max-size-buffers=0 max-size-time=0 ! vpudec ! mfw_v4lsink rotate=180 demux. ! \
queue max-size-buffers=0 max-size-time=0 ! beepdec ! autoaudiosink
(valid rotate value: 0, 90, 180 or 270)
(While the angle of rotation is 90° or 270°, the maximum video resolution can not be larget than 1024*1024.)

or

gst-launch playbin2 uri=file:///tools/Advantech.avi video-sink="mfw_isink rotation=0"
(valid rotation value: 0~7)

webcam

realtime video

gst-launch v4l2src ! video/x-raw-yuv,width=640,height=480,framerate=20/1 ! autovideosink

take one snapshot

gst-launch v4l2src num-buffers=1 ! jpegenc ! filesink location=sample.jpeg

show one snapshot

VSALPHA=1 gst-launch filesrc location=sample.jpeg ! jpegdec ! imagefreeze ! mfw_isink

network streaming

RTSP(unicast)

sender (ip: 192.168.203.41)

vlc -I rc H.264.mp4 --screen-fps=10 :screen-caching=100 --sout='#rtp{sdp=rtsp://8554/}' -vvv

receiver

gst-launch rtspsrc location=rtsp://192.168.203.41:8554 \
latency=200 name=r  r. ! application/x-rtp,media=video ! \
queue max-size-buffers=0 max-size-time=0 ! rtph264depay ! \
vpudec ! mfw_v4lsink sync=false async=false r. ! \
'application/x-rtp, media=(string)audio' ! queue max-size-buffers=0 max-size-time=0 ! \
rtpmp4gdepay ! beepdec ! alsasink sync=false async=false -vvv 

RTP(multicast)

sender

vlc -I rc H.264.mp4 --screen-fps=10 :screen-caching=100 --sout='#rtp{mux=ts,dst=239.1.1.1,port=5004}' -vvv

receiver

route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 
gst-launch  udpsrc uri=udp://239.1.1.1:5004 \
caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264"\
! .recv_rtp_sink_0 gstrtpbin ! queue max-size-buffers=0 max-size-time=0 ! \
rtpmp2tdepay ! mpegtsdemux name=tsdem tsdem. ! queue max-size-buffers=0 max-size-time=0 ! \
vpudec ! mfw_isink sync=false tsdem. tsdem. ! queue max-size-buffers=0 max-size-time=0 ! \
beepdec  ! alsasink sync=false -vvv

Java

How to install Java

Linux Kernel

Get kernel configs from running OS

You can get the .config file in running Linux OS by the following command.

# zcat /proc/config.gz > current.config

Furthermore, this feature is enabled by CONFIG_IKCONFIG_PROC.

Debug kernel panic and oops

To enable kernel symbols & debug information, you have to turn on these options and re-build kernel image. Just remember to keep the vmlinux & System.map files for debugging. They should be located at kernel root folder.

CONFIG_DEBUG_KERNEL=y
CONFIG_KALLSYMS=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_INFO_REDUCED is not set

Here is an example of Oops case.

Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = d8e3c000
[00000000] *pgd=68d76831, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 1 PID: 1030 Comm: pulseaudio Not tainted 3.14.52-svn2009 #3
task: d8f90000 ti: d8b6c000 task.ti: d8b6c000
PC is at dac_get_volsw+0x60/0x74
LR is at dac_get_volsw+0x5c/0x74
pc : [<80558e68>]    lr : [<80558e64>]    psr: 60070013
sp : d8b6dea8  ip : 00000000  fp : d8617400
r10: 7ef214f8  r9 : d8b6c000  r8 : d866e280
r7 : d861757c  r6 : d8617600  r5 : d8948800  r4 : 00000000
r3 : 00000000  r2 : 00000000  r1 : 00000001  r0 : 0000e564
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: 10c53c7d  Table: 68e3c04a  DAC: 00000015
Process pulseaudio (pid: 1030, stack limit = 0xd8b6c238)
Stack: (0xd8b6dea8 to 0xd8b6e000)
dea0:                   80558e08 00000001 d8948800 80535bf4 f01ad000 d861757c
dec0: 00000000 00000009 00000009 00000009 0035f648 00000000 00000000 00000000
dee0: 00000000 00000000 00000000 80967f28 00000007 8001a3c4 6df18338 d8b6dfb0
df00: 00000003 0035f960 7ef21aa4 d80cb410 7ef214f8 d87d53c0 c2c85512 0000000d
df20: d8b6c000 00000000 7ef217f4 800e7f4c d87d53c8 800ebfc0 6ddcf000 800d2e14
df40: 80962860 0000000d 0035ccf8 8069fa10 0000000d 800f19e4 d87d53c0 d87d53c0
df60: 7ef21d94 8069fc88 00000802 d87d53c0 7ef214f8 d87d53c0 c2c85512 0000000d
df80: d8b6c000 00000000 7ef217f4 800e8140 00361b58 00361cbc 00000000 00000036
dfa0: 8000e5e4 8000e460 00361b58 00361cbc 0000000d c2c85512 7ef214f8 0035cdd8
dfc0: 00361b58 00361cbc 00000000 00000036 00361ab0 00361b68 00000007 7ef217f4
dfe0: 6dfa73ac 7ef214ec 6df0efa4 76a5ecbc 20070010 0000000d 00000000 00000000
[<80558e68>] (dac_get_volsw) from [<80535bf4>] (snd_ctl_ioctl+0x5dc/0xb18)
[<80535bf4>] (snd_ctl_ioctl) from [<800e7f4c>] (do_vfs_ioctl+0x3dc/0x59c)
[<800e7f4c>] (do_vfs_ioctl) from [<800e8140>] (SyS_ioctl+0x34/0x5c)
[<800e8140>] (SyS_ioctl) from [<8000e460>] (ret_fast_syscall+0x0/0x38)
Code: e26330fc e585304c eb0501a0 e30e0564 (e5941000)
---[ end trace 7c4f0a24c41cc488 ]---

1. Check the PC (Program Counter) to find out where crash occurs.

PC is at dac_get_volsw+0x60/0x74

2. Grep dac_get_volsw() in System.map and get the symbol name address

$ cd <kernel root folder>
$ grep dac_get_volsw System.map
80558e08 t dac_get_volsw

Note: You can find the program counter is equaled to the sum of function entry address & offset.

pc : [<80558e68>] = 80558e08 + 0x60

3. Run addr2line to read the exact line number in source code.

$ arm-linux-gnueabi-addr2line -f -e vmlinux 80558e68
dac_get_volsw
/home/root/Projects/Linux/fsl-yocto-3.14.52_1.1.0/linux-imx/sound/soc/codecs/sgtl5000.c:335

4-1. In alternative way, you can run objdump to get the disassembly and source code mapping.

$ arm-linux-gnueabi-objdump -DS vmlinux > kernel.objdump

Note: This step may take very long time to generate the dump file. So, maybe you can stop it, once you can find the function symbols in the file.

4-2. Find dac_get_volsw() in kernel.objdump, and check the pc address [<80558e68>]. Then, you can find the problem occurs at the same line of source code.

80558e08 <dac_get_volsw>:
 *                      ------------------------------
 * userspace value      0xc0                         0
 */
static int dac_get_volsw(struct snd_kcontrol *kcontrol,
                         struct snd_ctl_elem_value *ucontrol)
{
80558e08:       e92d4038        push    {r3, r4, r5, lr}
80558e0c:       e1a05001        mov     r5, r1
 ...
        //TEST
        printk("crash test!\n");
80558e60:       eb0501a0        bl      806994e8 <printk>
        printk("%d\n", *p);
80558e64:       e30e0564        movw    r0, #58724      ; 0xe564
80558e68:       e5941000        ldr     r1, [r4]
80558e6c:       e3480080        movt    r0, #32896      ; 0x8080
80558e70:       eb05019c        bl      806994e8 <printk>

NFS

boot up to Linux

The following operations demonstrate how to boot-up RSB-4410(4410LBV3480/4410LBV2080) with loading kernel image and mounting the root filesystem via NFS.

  • prerequisites for NFS server (e.g. ip: 172.22.15.145)
    • NFS root
  • add the following line to /etc/exports
    <tt><small>/NFS *(rw,sync,wdelay,hide,nocrossmnt,insecure,no_root_squash,no_all_squash,subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)</small></tt>
    • execute the following command to export all directories
    $ sudo exportfs -a
    • make one copy of the individual BSP's rootfs located in the directory, /NFS
    for 4410LBV3480
    • copy the following three files included in 4410LBV3480 to /NFS/rsb-4410_rootfs
    uImage imx6q-rsb4410.dtb u-boot_crc.bin
    for 4410LBV2080
    • copy the uImage (which CONFIG_ROOT_NFS is set) to /NFS/4410lbv2
    • set the following lines to /NFS/4410lbv2/etc/rc.d/rc.conf

Invalid language.

You need to specify a language like this: <source lang="html4strict">...</source>

Supported languages for syntax highlighting:

4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic


export DEPLOYMENT_STYLE="NFS"
export IPADDR0="dhcp"
  • u-boot
Hit any key to stop autoboot then perform the following commands:
for 4410LBV3480
> setenv serverip 172.22.15.145; setenv autoload n; dhcp
> setenv nfsroot /NFS/rsb-4410_rootfs
> run netargs
> nfs ${loadaddr} ${nfsroot}/${uimage}
> nfs ${fdt_addr} ${nfsroot}/${fdt_file}
> bootm ${loadaddr} - ${fdt_addr}
for 4410LBV2080
> setenv serverip 172.22.15.145; setenv autoload n; dhcp
> setenv nfsroot /NFS/4410lbv2
> setenv bootargs_base ${bootargs_base} 'fec_mac=${ethaddr}'
> run bootargs_base bootargs_nfs
> nfs ${loadaddr} ${nfsroot}/uImage
> bootm
  • screenshot
for 4410LBV3480
Rsb-4410 booting from network.png
for 4410LBV2080
Rsb-4410 lbv2080 booting from network.png

boot up to U-Boot

The following operations demonstrate how to boot-up RSB-4410(4410LBV3480) with loading u-boot via NFS.

  • Keep the DEL key pressed in terminal emulator, then reset RSB-4410.
  • While "SPL >" shows up, release the DEL key, and type "CTRL+C" in terminal emulator to clear all invisible keystrokes.
  • SPL
> setenv serverip 172.22.15.145
> dhcp
> nfs ${loadaddr} /NFS/rsb-4410_rootfs/u-boot_crc.bin
> go ${loadaddr}
  • Screenshot
Rsb-4410 boot up to U-Boot.png

OpenCV

Open source computer vision

Python

Install Python

Qt

Writing the Qt application with displaying Chinese

The section will demonstrate how to install Chinese font, and let Qt application to display Chinese; all operations are performed with RSB-4410 (4410A1LIV6000) and Ubuntu 12.04.

  • install Chinese font
On target side (RSB-4410)
Please refer to this for details.
On host side (Ubuntu 12.04)
perform the following command
# sudo apt-get install ttf-wqy-microhei
  • start QtCreator (on host side)
create one project named hello_qt that contains one label which text is "哈囉 Qt" and font is "WenQuanYi Micro Hei, 72"
(please refer to how to Setting-up QtCreator to cross compile for iMX6 series if needed)
Hello qt chinese.png
build , deploy and run
RTENOTITLE
RTENOTITLE

SSH

SSH connection

TFTP

boot up to Linux

The following operations demonstrate how to boot-up RSB-4410(4410LBV3480/4410LBV2080) with loading kernel image via TFTP and mounting the root filesystem via NFS.

  • prerequisites for NFS server (This section is identical with the one of NFS.)
  • prerequisites for TFTP server (e.g. ip: 172.22.15.145)
  • /etc/xinetd.d/tftp
service tftp
{
    socket_type     = dgram
    protocol        = udp
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /tftpboot
    disable         = no
}
  • /etc/services
tftp            69/tcp
tftp            69/udp
  • restart the xinetd service
  • u-boot
Hit any key to stop autoboot then perform the following commands:
for 4410LBV3480
> setenv serverip 172.22.15.145
> setenv nfsroot /NFS/rsb-4410_rootfs
> run netboot
for 4410LBV2080
> setenv serverip 172.22.15.145; setenv autoload n; dhcp
> setenv nfsroot /NFS/4410lbv2
> setenv bootargs_base ${bootargs_base} 'fec_mac=${ethaddr}'
> run bootcmd_net

Yocto

In this section, we share some tips to use & modify BB files and related configurations for Yocto.

How to delete temporary workspace after build process

By default, the build system preserves the temporary files under the ${TMPDIR}/work directory of each recipe for inspection and possible debugging purposes. If you would rather have these files deleted to save disk space as the build progresses, you can enable rm_work by adding the following to your local.conf file, which is found in the Build Directory.

INHERIT += "rm_work"

To exclude some recipes from having their work directories deleted by rm_work, you can add the names of the recipe or recipes you are working on to the RM_WORK_EXCLUDE variable, which can also be set in your local.conf file. Here is an example:

RM_WORK_EXCLUDE += "busybox glibc"

How to get multi-sources from GIT server

You can assign a name to distinguish the different GIT URIs, and define different destsuffix to save them respectively. Furthermore, to override SRCREV with the name, you can assign different commit id for each GIT branch.

SRC_URI = " \
    

git://git.allseenalliance.org/gerrit/core/alljoyn.git

protocol=https;branch=${GIT_BRANCH};name=router;destsuffix=git/core/alljoyn \git://git.allseenalliance.org/gerrit/services/base.git
protocol=https;branch=${GIT_BRANCH};name=services;destsuffix=git/services/base \ file://modify_flags_for_yocto.patch" SRCREV_router = "0d71b216bb3a3cadc615c3eda6f8200093c5e117" SRCREV_services = "403cda579242701d42d2d7c0da308d63a8f46070"

Skip QA check

You can skip the specific QA check for your packages. For details, check the insane.bbclass bbclass in Yocto Project Reference Manual.

INSANE_SKIP_${PN} += "dev-so"

Create BB file to install pre-built SO binaries

Below is an example to add SO binaries into your image. You may need to modify the blue items for your make install path & library name.

SRC_URI = "file://test.tar.gz"

S = "${WORKDIR}/test"

do_install() {
    install -d ${D}/usr/lib
    cp -axr ${S}/lib*.* ${D}/usr/lib/
}

# Avoid package splitting into run-time and debug components
 INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
# Avoid QA Error for already-stripped
 INHIBIT_PACKAGE_STRIP = "1"
# List the files for Package
 FILES_${PN} += "/usr/lib"
# Put all SO files in main rpm package
 FILES_SOLIBSDEV = ""
 INSANE_SKIP_${PN} += "dev-so"
# Set alias name to satisfy runtime dependencies
 RPROVIDES_${PN} = "libtest-1.00.so"

Install Node-RED packages

For Node-RED package installation, you can refer to the example below. Please note this example is based on the imyller's meta-nodejs layer for Node.js infrastructure.

SRC_URI =  "

git://github.com/ADVANTECH-Corp/node-red-contrib-alljoyn.git

protocol=git" SRCREV = "677333b1ed1a26a966c32d98af073d0b9a2b9088" S = "${WORKDIR}/git" # Inherit NPM class inherit npm-install-global # Do node-gyp rebuild in do_install() phase NPM_INSTALL_FLAGS = "--unsafe-perm" # Skip QA check INSANE_SKIP_${PN} = "staticdev"

How to add additional gst-plugins

  • add new settings in Yocto's conf/local.conf
LICENSE_FLAGS_WHITELIST = "commercial"
 
COMMERCIAL_AUDIO_PLUGINS ?= " \
gst-plugins-ugly-mad \
gst-plugins-ugly-mpegaudioparse \
"
COMMERCIAL_VIDEO_PLUGINS ?= " \
gst-plugins-ugly-mpeg2dec \
gst-plugins-ugly-mpegstream \
gst-plugins-bad-mpegvideoparse \
"
CORE_IMAGE_EXTRA_INSTALL += " \
gst-plugins-bad-mpegtsdemux \
gst-plugins-bad-fbdevsink \
gst-ffmpeg \
"
  • overwrite original hash code specified in the recipe x264_git
cat << EOF > meta-advantech/recipes-multimedia/x264/x264_git.bbappend
SRCREV = "ffc3ad4945da69f3caa2b40e4eed715a9a8d9526"
EOF
  • snapshot verified
RTENOTITLE

How to use Yocto Project Application Development Toolkit (ADT)

(see Setting-up Eclipse Plug-in to cross compile for iMX6 series)

How to add & use Chromium browser

  • add new settings in conf/local.conf
LICENSE_FLAGS_WHITELIST = "commercial"
CORE_IMAGE_EXTRA_INSTALL += "chromium"
  • switch "OpenGL ES H/W acceleration" on
edit /usr/share/applications/google-chrome.desktop
[Desktop Entry]
...
Exec=/usr/bin/google-chrome --use-gl=egl %U
...
  • HTML5 scores
RTENOTITLE
RTENOTITLE

CC2650 Sensortag

CC2650STK – Multi standard supporting Bluetooth low energy, 6LoWPAN, and ZigBee. These web pages provides gives details for CC2650 SensorTag2015 CC2650 SensorTag User's Guide