COM AM35 Linux: Difference between revisions
No edit summary |
|||
(54 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
== | == Linux virtual machine for development == | ||
* Please have a look at: '''[[Virtual Machine for Application Development]]''' | |||
=== | ==Building your own Kernel == | ||
=== | ==== Sources for the AM35x Linux Kernel v3.2.12 / v3.2.81 ==== | ||
* The latest Linux Kernel source code is available on GitHub: [https://github.com/dh-electronics/linux-am35x https://github.com/dh-electronics/linux-am35x] | |||
* We recommend to use on new projects the latest v3.2.81 Linux Kernel | |||
=== How to | ==== How to build a kernel ==== | ||
Get sources from Github and build the linux kernel using 5 threads and a build directory | |||
{| class="wikitable" | |||
|< | |1. Start a terminal on Linux | ||
|- | |||
|2. <tt># ''git clone [https://github.com/dh-electronics/linux-am35x.git https://github.com/dh-electronics/linux-am35x.git]''</tt> | |||
|- | |||
|3. <tt># ''mkdir build''</tt> | |||
|- | |||
|4. <tt># ''cd linux-am35x''</tt> | |||
|- | |- | ||
|< | |5. <tt># ''git checkout BRANCH''<br/>(BRANCH=dev/3.2.12_dhcom or BRANCH=dev/3.2.81_dhcom)</tt> | ||
|- | |- | ||
|< | |6. <tt># ''ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make O=../build/ dhcm3517_defconfig''</tt> | ||
|- | |- | ||
|< | |7. <tt># ''ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make -j5 O=../build/ uImage''</tt> | ||
|} | |} | ||
* Your new <tt>uImage</tt> file is available in <tt>../build/arch/arm/boot</tt> | |||
'''Remark:''' | |||
* On linux-am35x.git we use the git branch "master". | |||
{| style="width: 100%; color: #000000; border-spacing: 2px; border: 1px solid darkgray; background: lightgrey;" valign="top" | | |||
| style="width: 100%;" | | |||
|- | |||
| | |||
=== ''Sources older than April 2014'' === | |||
==== Sources for the AM35 Kernel based on 3.2.12 Mainline ==== | |||
:* [http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.12.tar.bz2 Kernel version: 3.2.12 from www.kernel.org] | |||
:* [[media:DHCOM-linux-am3517.patch.zip|Patch for DHCOM AM35 Linux (2014-04-23) [includes RT-Preemptiv patch]]] | |||
: | :* [[media:DHCOM-linux-am3517.config.zip|Kernel configuration for DHCOM AM35 Linux (2014-04-23)]] | ||
:: | |||
:* [[media:DHCOM-linux-am3517_BUILD.zip |Current built of the 3.2.12 DHCOM AM35 linux kernel (2014-04-23)]] | |||
::* '''latest changes: 2013-12-05 -> 2014-04-23''' | |||
::: - Add DH touch support | |||
::: - Add Boardfile to use LCD-Interface with GPIO-functionality (DHpicoITX) | |||
::* '''latest changes: 2013-06-17 -> 2013-12-05''' | |||
::: - USB-OTG: Fixed mass storage operation (depends on latest kernel configuration, too) | |||
::: - BUG-Fix: Set rtc default values to a valid status | |||
::* '''latest changes: 2013-05-22 -> 2013-06-17''' | |||
::: - (Minor) Customizations for 1 GByte Spansion NAND-Flash | |||
::* '''latest changes: 2013-04-04 -> 2013-05-22''' | |||
::: - (Minor) BUG-Fix: Initialization of DHCOM GPIO_E pad fixed | |||
::* '''latest changes: 2012-12-14 -> 2013-04-04''' | |||
::: - SPI BUG-Fix: Disabled "Turbo-Mode" to avoid wrong additional byte-reads (If used: Kernel-Update recommended) | |||
::: - I2C BUG-Fix: AM35x Errata 1.1.26 (If used: Kernel-Update recommended) | |||
::: - enabled ETH_VIO_GPIO (necessary for DHCOM pico-ITX) to supply ethernet transformer | |||
::: - FF UART support added | |||
::: - DHCOM (CAM) GPIO Padconfigurations changed to GPIO-Mode on default. | |||
::: - removed USB-OTG-POWER-GPIO (Use kernel-argument [u-boot env bootargs] 'dheva01_version=200' to activate it again) | |||
::: - backlight PWM default is now 205 (80%) | |||
::* '''2012-11-08 -> 2012-12-14''' | |||
::: - /dev/spidev1.1 is now /dev/spidev1.0 | |||
::: - watchdog driver support for magic close added | |||
::* '''2012-08-29 -> 2012-11-08''' | |||
::: - added audio support | |||
::: - changed partitionsize of linux-kernel | |||
==== How to build a kernel ==== | |||
{| class="wikitable" | |||
|1. Start a terminal on Linux | |||
|- | |- | ||
| | |2. Copy the above mentioned source files (linux-3.x.y.tar.bz2, .config, *.patch) into our <code>work_path</code> | ||
|- | |||
|3. <tt># ''cd work_path''</tt> | |||
|- | |||
|4. <tt># ''tar xfjv linux-3.2.12.tar.bz2''</tt> | |||
|- | |||
|5. <tt># ''cd work_path/linux-3.2.12''</tt> | |||
|- | |||
|6. <tt># ''patch -p1 < ../dh-linux-am35x_xxxxxxxx.patch''</tt> | |||
|- | |||
|7. <tt># ''cp ../dh-linux-am35x_xxxxxxxx.config .config'</tt> | |||
|- | |||
|8. <tt># ''ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make uImage''</tt> | |||
|} | |||
:* Your new <tt>uImage</tt> file is available in <tt>work_path/linux-3.2.12/arch/arm/boot</tt> | |||
|} | |} | ||
:2. | == Update the kernel with U-Boot == | ||
| | :The linux kernel will be updated by the [[COM_AM35_Bootloader_U-Boot#Update|U-Boot flash update]]. | ||
:* [[media:DHCOM-linux-am3517_BUILD.zip |Binary Image DHCOM AM35 linux-3.2.12-rt20 kernel (details see above)]] | |||
:{| class="wikitable" | |||
|1. Copy the <code>'''uImage'''</code> and <code>'''uImage.env'''</code> file onto a microSD card with a FAT file system (you can use the 1st partition on the microSD card) | |||
|- | |- | ||
| | |2. Insert the microSD card and start the system | ||
|- | |- | ||
| | |3. Go to the U-Boot console by pressing '''BACKSPACE'''/'''DEL''' on a RS232 terminal (during startup) | ||
|- | |- | ||
|<code>'' | |4. <code>''update linux''</code> | ||
|- | |} | ||
|< | |||
==Debian Rootfilesystem == | |||
=== Available Rootfilesystems === | |||
Please have a look at the [[COM_AM35-D2#Downloads | AM35x Downloads]] section. | |||
=== External Documentation === | |||
* [https://debian-handbook.info/browse/stable/ The Debian Administrator's Handbook]: A reference book presenting the Debian distribution, from initial installation to configuration of services. The administration and configuration chapters apply to our Debian based root filesystems. | |||
* [https://www.debian.org/doc/ Debian Documentation] | |||
=== Login === | |||
{| class="wikitable" align="center" | style="width: 400px; color: #000000; background: #FFFFFF;" valign="top" | | |||
|| | |||
<tt> | |||
Debian GNU/Linux 6.0 dhcom ttyO0<br/> | |||
dhcom login: '''root'''<br/> | |||
Password: '''foo''' | |||
</tt> | |||
|} | |||
=== Shutdown === | |||
{| class="wikitable" align="center" | style="width: 400px; color: #000000; background: #FFFFFF;" valign="top" | | |||
|<tt># shutdown -h now</tt> | |||
|} | |} | ||
=== Calibrating the touchscreen === | === Calibrating the touchscreen === | ||
{| class="wikitable" align="center" | style="width: 400px; color: #000000; background: #FFFFFF;" valign="top" | | |||
|< | |<tt># ts_calibrate</tt> | ||
|} | |} | ||
*Check the enviroment variable "TSLIB_TSDEVICE=/dev/input/event0" with <code> printenv </code> if an error occurs. | |||
===Running Qt Demos === | ===Running Qt Demos === | ||
{| class="wikitable" align="center" | style="width: 400px; color: #000000; background: #FFFFFF;" valign="top" | | |||
|< | |<tt># cd /usr/qt/demos/demoname</tt><br/><tt># ./demoname -qws</tt> | ||
|} | |} | ||
*For the Qt-Browser change <code>demoname</code> to <code>browser</code> | |||
*If the touchscreen does not work please check the enviroment variable "QWS_MOUSE_PROTO=Tslib:/dev/input/event0" with <code> printenv</code>. | |||
'''''Run Qt demos with powerVR (3d acceleration) support | '''''Run Qt demos with powerVR (3d acceleration) support''''' | ||
{| class="wikitable" align="center" | style="width: 400px; color: #000000; background: #FFFFFF;" valign="top" | | |||
|< | |<tt># cd /usr/qt/demos/embedded/demoname</tt><br/><tt># ./demoname -qws</tt> | ||
|} | |} | ||
'''''Run demos with | '''''Run Qt demos with usb mouse input device''''' | ||
{| class="wikitable" align="center" | style="width: 400px; color: #000000; background: #FFFFFF;" valign="top" | | |||
|< | |<tt># cd /usr/qt/demos/demoname</tt><br/><tt># export QWS_MOUSE_PROTO=Auto:/dev/input/mice</tt><br/><tt># ./demoname -qws</tt> | ||
|} | |} | ||
'''Remark:''' Just remember that you need to run the Qt demos with the options -qws. Omitting -qws results in the app waiting to connect to the QWS Server, which is not running. | |||
== How to create a microSD-card with a rootfilesystem on it == | |||
=== | 1. Format a microSD card like following (in linux e.g. gparted, palimpsest) with '''Master Boot Record''' partition scheme | ||
{| class="wikitable" | style="width: 450px; color: #000000; background: #FFFFFF;" valign="top" | | |||
|< | | | ||
<tt>P1 '''FAT''' (Primary partition: 100MB)</tt><br/> | |||
<tt>P2 '''ext3''' (Primary partition: Residual space)</tt> | |||
|} | |||
2. Untar the root file system to the ext3 partition of the microSD card (Don't copy the tar archive directly to the microSD card) | |||
{| class="wikitable" | style="width: 450px; color: #000000; background: #FFFFFF;" valign="top" | | |||
| | |||
Start the Console on Linux<br/> | |||
<tt># ''su''</tt><br/> | |||
<tt># ''chmod 755 /path/of/the/microSD_card''</tt><br/> | |||
<tt># ''cd /path/of/the/microSD_card''</tt><br/> | |||
<tt># ''tar xfjv path/to/RootFS/Name_of_RootFS_file.tar.bz2''</tt> | |||
|} | |} | ||
: | '''Remark:''' If you got a *.tar.gz file so type <tt> tar xfzv ... </tt> to extract the rootfilesystem. | ||
== Kernel Userspace Interfaces to Access Hardware == | |||
=== Serial (UART) Interfaces === | |||
:{| class="wikitable" style="width: 400px" | |||
| style="width: 50%;"| DHCOM (FF) UART 1||<code>/dev/ttyO0</code> | |||
|- | |||
||DHCOM (BT) UART 2 ||<code>/dev/ttyO2</code> | |||
|- | |||
||DHCOM (STD) UART 3 ||<code>/dev/ttyO1</code> | |||
|} | |||
=== I2C Interfaces === | |||
:{| class="wikitable" style="width: 400px" | |||
| style="width: 50%;"| DHCOM I2C 1||<code>/dev/i2c-3</code> | |||
|- | |||
||DHCOM I2C 2 ||<code>/dev/i2c-2</code> | |||
|- | |||
||On Module Devices ||<code>/dev/i2c-1</code> | |||
|} | |||
=== | === SPI Interfaces === | ||
:{| class="wikitable" style="width: | :{| class="wikitable" style="width: 400px" | ||
|| | | style="width: 50%;"| DHCOM SPI 1||<code>/dev/spidev1.0</code> | ||
|- | |- | ||
|| | ||DHCOM SPI 2 ||<code>/dev/spidev2.0</code> | ||
|} | |} | ||
=== Control the display brightness === | |||
:{| class="wikitable" | :{| class="wikitable" | ||
|<code>'' | |<code>''echo <value> >/sys/class/backlight/omap-pwm-backlight/brightness''</code> | ||
|} | |} | ||
:value range: 0..255 | |||
=== | === Control GPIOs === | ||
:{|class="wikitable" style="text-align: center; width: 600px" | :{|class="wikitable" style="text-align: center; width: 600px" | ||
|- | |- | ||
Line 172: | Line 286: | ||
|} | |} | ||
=== Initialize and | === Initialize and Test CAN Interface === | ||
:Initialize: | :Initialize: | ||
:{| class="wikitable" | :{| class="wikitable" | ||
Line 187: | Line 301: | ||
|<code>''candump can0''</code> | |<code>''candump can0''</code> | ||
|} | |} | ||
:Get can-utils: | |||
:* [[media:can-utils_armel.zip|Debian package containing can-utils (ARM)]] | |||
=== Testing display / framebuffer === | |||
:In most common cases the "Display Bits" should be "8" | |||
:With "fb" you select the number of the framebuffer device (e.g. /dev/fb0) | |||
:{| class="wikitable" style="width: 1200px" | |||
||<code>fb_1Colorfill</code>||Fills the framebuffer device with a given RGB color<br><code>fb_1Colorfill [fb (0..31)] [Display Bits (1..8)] [Red value (0..255)] [Green value (0..255)] [Blue value (0..255)]</code> | |||
|- | |||
||<code>fb_fb2BMP</code>||Copies the framebuffer device data into a 24Bit BMP-File<br><code>fb_fb2BMP [fb (0..31)] [24-Bit BMP-File]</code> | |||
|- | |||
||<code>fb_LoadBMP</code>||Loads a 24Bit BMP-file into a 32Bit framebuffer device<br><code>fb_LoadBMP [fb (0..31)] [24-Bit BMP-File] [Display Bits (1..8)] [Transparency (0..100)]</code> | |||
|} | |||
:Get DH farmebuffer tools: | |||
:* [[media:dh_framebuffer_tools.zip|DH framebuffer tools version 1.0 (ARM)]] | |||
== Additional Information == | |||
*[[Linux Kernel Features | Linux Kernel Features ]] | |||
*[[ELBE Overview| Embedded Linux Build Environment (ELBE)]] |
Latest revision as of 13:16, 7 October 2016
Linux virtual machine for development
- Please have a look at: Virtual Machine for Application Development
Building your own Kernel
Sources for the AM35x Linux Kernel v3.2.12 / v3.2.81
- The latest Linux Kernel source code is available on GitHub: https://github.com/dh-electronics/linux-am35x
- We recommend to use on new projects the latest v3.2.81 Linux Kernel
How to build a kernel
Get sources from Github and build the linux kernel using 5 threads and a build directory
1. Start a terminal on Linux |
2. # git clone https://github.com/dh-electronics/linux-am35x.git |
3. # mkdir build |
4. # cd linux-am35x |
5. # git checkout BRANCH (BRANCH=dev/3.2.12_dhcom or BRANCH=dev/3.2.81_dhcom) |
6. # ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make O=../build/ dhcm3517_defconfig |
7. # ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make -j5 O=../build/ uImage |
- Your new uImage file is available in ../build/arch/arm/boot
Remark:
- On linux-am35x.git we use the git branch "master".
Sources older than April 2014Sources for the AM35 Kernel based on 3.2.12 Mainline
How to build a kernel
|
Update the kernel with U-Boot
- The linux kernel will be updated by the U-Boot flash update.
1. Copy the uImage
anduImage.env
file onto a microSD card with a FAT file system (you can use the 1st partition on the microSD card)2. Insert the microSD card and start the system 3. Go to the U-Boot console by pressing BACKSPACE/DEL on a RS232 terminal (during startup) 4. update linux
Debian Rootfilesystem
Available Rootfilesystems
Please have a look at the AM35x Downloads section.
External Documentation
- The Debian Administrator's Handbook: A reference book presenting the Debian distribution, from initial installation to configuration of services. The administration and configuration chapters apply to our Debian based root filesystems.
- Debian Documentation
Login
Debian GNU/Linux 6.0 dhcom ttyO0 dhcom login: root |
Shutdown
# shutdown -h now |
Calibrating the touchscreen
# ts_calibrate |
- Check the enviroment variable "TSLIB_TSDEVICE=/dev/input/event0" with
printenv
if an error occurs.
Running Qt Demos
# cd /usr/qt/demos/demoname # ./demoname -qws |
- For the Qt-Browser change
demoname
tobrowser
- If the touchscreen does not work please check the enviroment variable "QWS_MOUSE_PROTO=Tslib:/dev/input/event0" with
printenv
.
Run Qt demos with powerVR (3d acceleration) support
# cd /usr/qt/demos/embedded/demoname # ./demoname -qws |
Run Qt demos with usb mouse input device
# cd /usr/qt/demos/demoname # export QWS_MOUSE_PROTO=Auto:/dev/input/mice # ./demoname -qws |
Remark: Just remember that you need to run the Qt demos with the options -qws. Omitting -qws results in the app waiting to connect to the QWS Server, which is not running.
How to create a microSD-card with a rootfilesystem on it
1. Format a microSD card like following (in linux e.g. gparted, palimpsest) with Master Boot Record partition scheme
P1 FAT (Primary partition: 100MB) |
2. Untar the root file system to the ext3 partition of the microSD card (Don't copy the tar archive directly to the microSD card)
Start the Console on Linux |
Remark: If you got a *.tar.gz file so type tar xfzv ... to extract the rootfilesystem.
Kernel Userspace Interfaces to Access Hardware
Serial (UART) Interfaces
DHCOM (FF) UART 1 /dev/ttyO0
DHCOM (BT) UART 2 /dev/ttyO2
DHCOM (STD) UART 3 /dev/ttyO1
I2C Interfaces
DHCOM I2C 1 /dev/i2c-3
DHCOM I2C 2 /dev/i2c-2
On Module Devices /dev/i2c-1
SPI Interfaces
DHCOM SPI 1 /dev/spidev1.0
DHCOM SPI 2 /dev/spidev2.0
Control the display brightness
echo <value> >/sys/class/backlight/omap-pwm-backlight/brightness
- value range: 0..255
Control GPIOs
DHCOM Name: alt. DHCOM Name: SO-DIMM Pin# Linux <GPIO#> GPIO A 154 116 GPIO B 156 117 GPIO C 162 118 GPIO D 163 119 GPIO E 164 125 GPIO F 165 140 GPIO G 167 141 GPIO H 173 155 GPIO I 175 152 CIF HSYNC GPIO J 74 96 CIF PCLK GPIO K 72 94 CIF MCLK GPIO L 70 58 CIF VSYNC GPIO M 68 97 CIF D9 GPIO N 66 98 CIF D8 GPIO O 64 95 CIF D7 GPIO P 62 106 CIF D6 GPIO Q 60 105 CIF D5 GPIO R 58 104 CIF D4 GPIO S 56 103 CIF D3 GPIO T 54 102 CIF D2 GPIO U 52 101 CIF D1 GPIO V 50 100 CIF D0 GPIO W 48 99
- Remark: Depending on your board configuration some of the additional gpios shared with the camera interface are not available on your system.
- Export
echo <GPIO#> >/sys/class/gpio/export
- Remark: Have a look into
/sys/class/gpio/
for already configured gpios.
- Remark: Have a look into
- Set direction
echo in >/sys/class/gpio/gpio<GPIO#>/direction
echo out >/sys/class/gpio/gpio<GPIO#>/direction
- Set state
echo 0 >/sys/class/gpio/gpio<GPIO#>/value
echo 1 >/sys/class/gpio/gpio<GPIO#>/value
Initialize and Test CAN Interface
- Initialize:
ip link set can0 up type can bitrate 500000
- Send test message via cansend (part of can-utils):
cansend can0 100#11.2233.44556677.88
- Receive can messages (part of can-utils):
candump can0
- Get can-utils:
Testing display / framebuffer
- In most common cases the "Display Bits" should be "8"
- With "fb" you select the number of the framebuffer device (e.g. /dev/fb0)
fb_1Colorfill
Fills the framebuffer device with a given RGB color fb_1Colorfill [fb (0..31)] [Display Bits (1..8)] [Red value (0..255)] [Green value (0..255)] [Blue value (0..255)]
fb_fb2BMP
Copies the framebuffer device data into a 24Bit BMP-File fb_fb2BMP [fb (0..31)] [24-Bit BMP-File]
fb_LoadBMP
Loads a 24Bit BMP-file into a 32Bit framebuffer device fb_LoadBMP [fb (0..31)] [24-Bit BMP-File] [Display Bits (1..8)] [Transparency (0..100)]
- Get DH farmebuffer tools: