COM iMX25 Linux: Difference between revisions
Line 75: | Line 75: | ||
:* [[media:Linux-2.6.38_DHCOM_iMX25_kernel.zip|Binary image 2.6.38 DHCOM iMX25 linux kernel (2014-09-29)]] | :* [[media:Linux-2.6.38_DHCOM_iMX25_kernel.zip|Binary image 2.6.38 DHCOM iMX25 linux kernel (2014-09-29)]] | ||
:* [[media:DHCOM-linux-imx-3.2.9_BUILD.zip|Binary image 3.2.9 DHCOM iMX25 linux kernel (2016-02-24)]] | :* [[media:DHCOM-linux-imx-3.2.9_BUILD.zip|Binary image 3.2.9 DHCOM iMX25 linux kernel (2016-02-24)]] | ||
:* [[media:DHCOM-linux-imx-3.2.78_BUILD.zip|Binary image 3.2.78 DHCOM iMX25 linux kernel (2016-03-08)]] | |||
:{| class="wikitable" | :{| class="wikitable" |
Revision as of 10:08, 10 March 2016
Linux virtual machine for development
Introduction
For cross developing of applications we provide virtual machines with preinstalled toolchains. Choose the virtual machine which fits to your DHCOM target (Debian 8 on target -> Debian 8 virtual machine). Debian 8 does include support for architecture armhf and armel (Debian 6 only armel). By default Debian 8 is configured for armhf. The sections Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more and Booting via NFS apply for Debian 6 and Debian 8.
Debian 9 "Stretch" VM image (for VMware and VirtualBox)
Get the virtual machine
- Get VMware player or VirtualBox
- Debian 9 "Stretch" VMware Image
Default password for devel user: devel
Default password for root user: root
- Remark: For security reasons, you must set your own password when starting the virtual machine for the first time:
- Enter default user devel password (devel)
- Enter default user devel password again (devel)
- Enter your own user devel password
- Enter your own user devel password again
Version: | File: | Changes: |
---|---|---|
v2.1.Vx | Debian Stretch v2.1.Vx.zip | - Add Docker - Python updated to version 3.6.9 - Add ARMv7 Cross-Compiler gcc v10.2 - Enable Copy & Paste and Drag & Drop for files |
v2.0.Vx | Debian Stretch v2.0.Vx.zip | - First release version of Debian 9 VM |
Installed Toolchains
- Used for building the Linux Kernel for our ARMv7 DHCOM devices.
- ARM GCC 10.2 (available since v2.1.Vx)
- armhf: CROSS_COMPILE=/opt/gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-
- ARM GCC 8.3
- armhf: CROSS_COMPILE=/opt/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
- Linaro GCC 7.4
- armhf: CROSS_COMPILE=/opt/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
- Linaro GCC 6.3
- armhf: CROSS_COMPILE=/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
- Linaro GCC 4.9
- armhf: CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
- Used for building the Linux Kernel for our ARMv5 DHCOM devices.
- CodeSourcery GCC 4.5
- armel: CROSS_COMPILE=/opt/CodeSourcery-2011.03-41/bin/arm-none-linux-gnueabi-
Yocto Builds
Note (only concerning v2.0.Vx): If you are going to set up any DH electronics Yocto project by using the repo tool, you need to install Python version 3.6 or later.
This versions are not provided by official Debian Stretch package repositories. To manually install Python 3.6.9 , please follow the instructions:
$: sudo apt install libsqlite3-dev $: wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz $: tar xvf Python-3.6.9.tgz $: cd Python-3.6.9 $: ./configure --enable-optimizations --enable-shared $: make -j8 $: sudo make install $: sudo /sbin/ldconfig -v
Debian 8 "Jessie" VM image (for VMware)
Get the virtual machine
- Get the VMware player
- Debian 8 "Jessie" VMware Image
Important info (Feb/2018): Don't update the system, because it will brake the cross compiler. If you are asked to upgrade, say NO!
Password for devel user: devel
Password for root user: root
Version: | File: | Changes: |
---|---|---|
v1.3 | Debian Jessie v1.3.zip | - Debian Security updates - Compatibility VMware player 5.0 - Ready for yocto build - Build environment for DHCOM i.MX6 Qt5.7.1 / Qt5.9.1 - Add some useful tools |
v1.2 | Debian Jessie v1.2.zip | - Debian Security updates - Qt Creator + Support for imx6 modules + Demos - Update elbe to v1.0 - Add some tools / editors |
v1.1 | Debian Jessie v1.1.zip | - Compatibility VMware player 6.0 |
v1.0 | Debian Jessie v1.0.zip | - New Debian 8 VM |
Installed Toolchains
- Used for building the Linux Kernel for our ARMv7 DHCOM devices.
- Debian Multiarch Cross Toolchain GCC 4.9
- armhf: CROSS_COMPILE=arm-linux-gnueabihf-
- The Cross Toolchains is preinstalled. They should be used for cross development of native Linux applications. They are downloaded and installed with the Debian Package Manager.
- Install directory is /usr/bin/. Please have a look at the preconfigured Examples for cross development using the Eclipse IDE.
- Linaro GCC 4.9
- armhf: CROSS_COMPILE=/opt/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
- Used for building the Linux Kernel for our ARMv5 DHCOM devices.
- Debian Multiarch Cross Toolchain
- armel: CROSS_COMPILE=arm-linux-gnueabi-
- The Cross Toolchains is preinstalled. They should be used for cross development of native Linux applications. They are downloaded and installed with the Debian Package Manager.
- Install directory is /usr/bin/. Please have a look at the preconfigured Examples for cross development using the Eclipse IDE.
- CodeSourcery GCC 4.5
- armel: CROSS_COMPILE=/opt/CodeSourcery-2011.03-41/bin/arm-none-linux-gnueabi-
Qt5 Development
Qt5.5.1 prebuilt and preinstalled
We provide the prebuilt Qt5.5.1 libraries including WebEngine (only QtQuick) and WebKit in /work/qt5/sysroot/. This directory contains a Debian 8 based rootfilesystem which is prepared for DHCOM i.MX6, the matching sysroot (*-dev packages), and the Qt5.5.1 libraries installed.
Qt5.7.1
We support the latest Qt5.7.1 on our DHCOM i.MX6 and DHCOM am335x. Please download and install the qmake-sysroot-mx6-crossarmhf_5.7.1-1.0 or qmake-sysroot-am33-crossarmhf_5.7.1-1.0 package to the DebianVM:
- open a terminal
- # for i.MX6: wget https://dl.dropboxusercontent.com/u/19433555/DHCOM/imx6/qmake-sysroot-mx6-crossarmhf_5.7.1-1.0_amd64.deb
- # for AM335x: wget https://dl.dropboxusercontent.com/u/19433555/DHCOM/am335x/qmake-sysroot-am33-crossarmhf_5.7.1-1.0_amd64.deb
- install the package
- # sudo dpkg -i qmake-sysroot-mx6-crossarmhf_5.7.1-1.0_amd64.deb
- now the sysroot and qmake is ready to use
- path to qmake is /work/qt5_mx6_armhf/sysroot/usr/local/qt5.7.1/bin/qmake
Build a Qt5 Application via console
- open a terminal
- navigate to your Qt5 sources
- # /work/qt5/sysroot/usr/local/qt5.5.1/bin/qmake your_own_app.pro
- # make
Qt Creator
- Start Qt Creator IDE
- Open demo project TwoLED: /work/qt5_Demos/TwoLED
- There you can find the configurations for your own project.
Debian 6 "Squeeze" VM image (for VMware)
Get the virtual machine
- Get the VMware player
- Debian Squeeze VMware Image (PW: dhelectronics)
Password for devel user: devel
Password for root user: root
Version: | File: | Changes: |
---|---|---|
v1.5 | Debian Squeeze v1.5pw.zip | - Update VMware Tools - DH UBI-Tools - Language: English - System updates |
v1.4 | Debian Squeeze v1.4pw.zip | - ELBE v0.3.1 - ELDK 4.2 - Qt Creator 2.6.1 + Qt target libs 4.7.2 - System updates |
v1.3 | Debian Squeeze v1.3.zipx | - Mono 2.10 - mtd-utils - System updates |
v1.2 | Debian Squeeze v1.2.zipx | - Emdebian Toolchain gcc 4.3 / g++ 4.3 (arm-linux-gnueabi-... )- TortoiseHg + TortoiseHg for Nautilus - Add Plugin "REST Client" in Iceweasel |
v1.1 | Debian Squeeze v1.1.zipx | - Update Eclipse Indigo with CDT 8.0 - Add demo project "crosshelloworld" |
v1.0 | Debian Squeeze.zipx | - First Release - CodeSourcery Toolchain ( arm-none-linux-gnueabi-... )- Eclipse Helios & Indigo |
Installed Toolchains
- Used for building the Linux Kernel for our ARMv5 DHCOM devices.
- Debian Multiarch Cross Toolchain GCC 4.3
- armel: CROSS_COMPILE=arm-linux-gnueabi-
- The Cross Toolchains is preinstalled. They should be used for cross development of native Linux applications. They are downloaded and installed with the Debian Package Manager.
- Install directory is /usr/bin/. Please have a look at the preconfigured Examples for cross development using the Eclipse IDE.
- CodeSourcery GCC 4.5
- armel: CROSS_COMPILE=/opt/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-
Setting up a Eclipse Cross Executable Project:
- Use Eclipse Indigo (version 3.7.1) for your project.
- Create a new C++ Project and choose as Executable Project type Cross-Compile Project and as Toolchains Cross GCC
- Click the Button "Next" and specify under Tool command path the Toolchain path.
- CodeSourcery:
- Folder "
/opt/CodeSourcery/Sourcery_G++_Lite/bin
" - Prefix type "
arm-none-linux-gnueabi-
"
- Emdebian Toolchain:
- Folder "
/usr/bin
" - Prefix type "
arm-linux-gnueabi-
"
Use Virtualbox instead of VMware Player/Workstation
VMware Maschine mit VirtualBox starten (German)
Booting via TFTP/NFS
Prepare the virtual machine
- Setup nfs-kernel-server
- Install thf nfs server:
$ sudo apt-get install nfs-kernel-server
- Create a nfsservice directory:
$ mkdir /work/nfsroot
- Place the root file system in the folder
$ cd /work/nfsroot; sudo tar xf jessie....tar.gz
- Remove network config from rootfs
$ rm /work/nfsroot/etc/systemd/network/wired-dhcp.network
- Check whether the line below is part of the /etc/exports file
/work/nfsroot X.X.X.0/255.255.255.0(rw,no_root_squash,no_subtree_check,insecure)
- The X must be substituted by our network settings
- Restart the nfs-server with
4 /etc/init.d/nfs-kernel-server restart
- Install thf nfs server:
- Setup tftp-hpa server
- Install a tftp server :
$ sudo apt-get install tftpd-hpa
- Create a tftp service directory:
$ mkdir /work/tftp
- Edit config:
$ sudo vi /etc/default/tftpd-hpa
- Take care that TFTP_DIRECTORY points to your tftp service directory, for example '/work/tftp'
- Copy Kernel and DeviceTree into the tftp service directory
- Restart the tftp-server with
$ /etc/init.d/tftp-hpa restart
- Install a tftp server :
Setup the DHCOM Module for TFTP/NFS Boot
This example works with static IP addresses and is tested with DHCOM i.MX6 U-Boot 2015.10 and Kernle 4.4.38. It is possible to work with DHCP, too. For further information see https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
- Enter U-Boot console by pressing DEL/BACKSPACE on a RS232 terminal while switching on the power supply of the target
- Set IP addresses
# env set serverip 192.168.178.90 # env set ipaddr 192.168.178.91 |
- bootargs for nfs root (up to Debian Jessie)
# env set rootfs 'root=/dev/nfs nfsroot=192.168.178.90:/work/nfsroot/ ip=192.168.178.91:192.168.178.90::255.255.255.0:dhcom:eth0:none' |
- bootargs for nfs root (since Debian Stretch)
# env set rootfs 'root=/dev/nfs nfsroot=192.168.178.90:/work/nfsroot/,nfsvers=3 ip=192.168.178.91:192.168.178.90::255.255.255.0:dhcom:eth0:none' |
- load Linux kernel and devicetree with tftp (change filename and path to match you setup)
# tftp ${loadaddr} zImage # tftp ${fdt_addr} dtbs/imx6dl-dhcom3B-pdk2.dtb |
- set bootargs and boot
# run linuxargs # bootz ${loadaddr} - ${fdt_addr} |
- optional: save it to be permanent
# env set bootcmd 'tftp ${loadaddr} zImage; tftp ${fdt_addr} dtbs/imx6dl-dhcom3B-pdk2.dtb; run linuxargs; bootz ${loadaddr} - ${fdt_addr} # env save |
Code Examples for Userspace-Applications to Access SPI, I2C, GPIOs, and more
- The following code samples are designed to get you started quickly with the device interfaces to SPI, I2C, GPIOs and more in Linux userspace applications.
- Within Eclipse you can Import the provided projects:
- Execute ">File>Import ..."
- Navigate to ">General>Existing Projects into Workspace" within the import dialog
- Follow the dialog until you have finished.
Download Code Examples SPI, I2C, GPIOs and more
Included Demos:
- SPI
- I2C
- GPIO
- RTC
- UART
- Watchdog
- ADC (only for i.MX25)
Download C++ HAL class library for SPI, I2C, GPIO, UART and physical address space access
- For further documentation have a look at http://www.kernel.org/doc/Documentation/.
Building your own Kernel
Sources for the iMX25 Linux Kernel v3.2.9 / v3.2.78:
- The latest Linux Kernel source code is available on GitHub: https://github.com/dh-electronics/linux-imx25
How to build a kernel
Get sources from Github and build the linux kernel
1. Start a terminal on Linux |
2. # git clone https://github.com/dh-electronics/linux-imx25.git |
3. # git checkout BRANCH (BRANCH=dev/3.2.9_dhcom or BRANCH=dev/3.2.78_dhcom) |
4. # ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make imx25_dhcom_defconfig |
5. # ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- make uImage |
- Your new uImage file is available in arch/arm/boot
Sources older than February 2014Sources for the iMX25 Linux Kernel v2.6.38:Sources for the iMX25 Linux Kernel v3.2.9: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 on a RS232 terminal (during startup) 4. update linux
Debian Rootfilesystem
Available Rootfilesystems
Please have a look at the iMX25 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 ttymxc1 dhcom login: root |
Calibrating the touchscreen
# TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate |
Running example Qt Apps
# QWS_MOUSE_PROTO=Tslib:/dev/input/event0 /usr/qt/demos/demoname/demoname -qws |
- Remark: To start the Qt-Browser replace demoname with browser
Shutdown
# shutdown -h now |
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.
Busybox Rootfilesystem
Calibrating the touchscreen
TSLIB_TSDEVICE=/dev/event0 ts_calibrate
Running example Qt Apps
QWS_MOUSE_PROTO=Tslib:/dev/event0 /usr/qt/demos/demoname/demoname -qws
- For the Qt-Browser change
demoname
tobrowser
Login/Shutdown system
Username: root Password: n/a
halt
Kernel Userspace Interfaces to Access Hardware
Serial (UART) Interfaces
DHCOM (FF) UART 1 /dev/ttymxc1
DHCOM (BT) UART 2 /dev/ttymxc2
DHCOM (STD) UART 3 /dev/ttymxc4
I2C Interfaces
DHCOM I2C 1 /dev/i2c-1
DHCOM I2C 2 /dev/i2c-2
SPI Interfaces
DHCOM SPI 1 /dev/spidev1.0
DHCOM SPI 2 /dev/spidev2.0
Control the display brightness
echo <value> >/sys/devices/platform/imx-fb.0/backlight/imxfb-bl/brightness
- value range: 0..255
Control GPIOs
DHCOM Name: alt. DHCOM Name: Port: Pin: SO-DIMM Pin# Linux <GPIO#> GPIO A 2 12 154 44 GPIO B 3 21 156 85 GPIO C 2 4 162 36 GPIO D 2 5 163 37 GPIO E 2 6 164 38 GPIO F 2 7 165 39 GPIO G 2 8 167 40 GPIO H 2 9 173 41 GPIO I 3 17 175 81 CIF HSYNC GPIO J 1 10 74 10 CIF PCLK GPIO K 1 11 72 11 CIF MCLK GPIO L 1 8 70 8 CIF VSYNC GPIO M 1 9 68 9 CIF D9 GPIO N 4 21 66 117 CIF D8 GPIO O 1 7 64 7 CIF D7 GPIO P 1 6 62 6 CIF D6 GPIO Q 1 31 60 31 CIF D5 GPIO R 1 30 58 30 CIF D4 GPIO S 1 29 56 29 CIF D3 GPIO T 1 28 54 28 CIF D2 GPIO U 1 27 52 27
- Export
echo <GPIO#> >/sys/class/gpio/export
- Set direction
echo in >/sys/class/gpio/gpioXX/direction
echo out >/sys/class/gpio/gpioXX/direction
- Set value
echo 0 >/sys/class/gpio/gpioXX/value
echo 1 >/sys/class/gpio/gpioXX/value
- Get value
cat /sys/class/gpio/gpioXX/value
- unexport
echo <GPIO#> >/sys/class/gpio/unexport
Initialize and test CAN
- 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 message via candump (part of can-utils):
candump can0
- Get can-utils:
Test display / framebuffer
fb_1Colorfill
Fills the framebuffer device with a given RGB color Syntax: fb_1Colorfill [fb (0..31)] [Display Bits (1..8)] [Red value (0..255)] [Green value (0..255)] [Blue value (0..255)]
fb_fb2BMP
Copies framebuffer device data into a 24Bit BMP-File Syntax: fb_fb2BMP [fb (0..31)] [24-Bit BMP-File]
fb_LoadBMP
Loads a 24Bit BMP-file into a 32Bit framebuffer device Syntax: fb_LoadBMP [fb (0..31)] [24-Bit BMP-File] [Display Bits (1..8)] [Transparency (0..100)]
- In most common cases the "Display Bits" should be "8"
- Get DH framebuffer tools: