Difference between revisions of "User:Pau pajuelo"

From IGEP - ISEE Wiki

Jump to: navigation, search
m (Overview)
m (Compile GPIO driver source code via Host)
Line 243: Line 243:
  
 
At any point, if you see a mistake you can contribute to this How-To.<br>  
 
At any point, if you see a mistake you can contribute to this How-To.<br>  
 
== Compile GPIO driver source code via Host<br>  ==
 
 
Download [http://downloads.igep.es/labs/gpio-driver.tar.bz2 GPIO driver] and [[Linux Kernel 2.6.35.y|Kernel 2.6.35.y]] source code. Extract files.<br>
 
 
Edit GPIO driver Makefile's:
 
 
-In files: $/app/Makefile and $/lib/Makefile, make sure that your CROSS_COMPILE path is correct.
 
 
-In file: $/modules/Makefile, make sure that your CROSS_COMPILE path is correct and&nbsp;type your Kernel 2.6.35.y path.<br>
 
 
We will use the ncurses program for set up Kernel configuration, if you don't have this program installed then you must install it with this command:
 
<pre>sudo apt-get install ncurses-dev
 
</pre>
 
-Go to kernel path and type:
 
<pre>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- igep00x0_defconfig
 
</pre>
 
Exit Linux Kernel Configuration an return to Bash. Type:
 
<pre>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules_prepare
 
</pre>
 
File $/include/generated/autoconf.h was created
 
 
Finally compile GPIO driver, go to main Makefile path and compile all source code using make command.
 
 
Send binaries created from Host to Igep v2. <br>
 
  
 
== Install binaries via IGEP<br>  ==
 
== Install binaries via IGEP<br>  ==

Revision as of 18:08, 14 September 2012

TODO:

Update peripheral tutorials, finish gpio example program

Categorize new tutorials

Finish tutorials below

How to manage the kernel modules on Linux

How do I edit my kernel command line

Basic Software instructions

igep.ini parameters

The kernel command line syntax is name=value1. These next parameters are supported in igep.ini since IGEP-X_Loader 2.4.0-2:

[kernel]

Parameter Name Description Default value Comments
kaddress Kernel copy address =0x80008000 Hex memory address
rdaddress Ram Disk location address =0x81600000 Hex memory address;
disabled by default
serial.low Serial number (low part) =00000001 Numeric
serial.high Serial number (high part) =00000000 Numeric
revision Revision ID =0003 Numeric
kImageName Kernel, binary image name =zImage Kernel or binary image name
kRdImageName Kernel RAM Disk Image Name - Ram Disk image name
MachineID Machine ID (kernel ID)  ;IGEPv2
=2344
 ;Module
=2717
;Proton
=3203
Mode Boot Mode  ;Linux kernel
=kernel
 ;Other image (like uboot)
[binary image]

[kparams]

Parameter Name Description Default value Comments
buddy Enable/disable expansion board support  ;IGEPv2 Expansion Board support
=igep0022
 ;Berlin and Paris Expansion Board support
=base0010
New York Expansion
=ilms0015
console Setup the kernel console parameters =ttyO2,115200n8 -
earlyprintk Enable early printk - -
mem Setup the Board Memory Configuration =430M -
boot_delay Setup the boot delay =0 -
mpurate Setup ARM Processor Speed - -
loglevel Setup the loglevel - -
debug Enable kernel debug output - -
fixrtc Fix RTC variable - -
nocompcache Configure nocompcache variable =1 -
omapfb.mode Configure frame bugger configuration =dvi:hd720-16@50  ;Other configuration
=dvi:1280x720MR-16@60
vram Configure Video RAM assigned to every frame buffer - -
omapfb.vram Configure Video RAM assigned to every frame buffer - -
omapfb.debug Configure frame buffer debug output - -
omapdss.debug Configure DSS Video debug output - -
smsc911x.mac0 Configure Board Ethernet Mac Address =0xb2,0xb0,0x14,0xb5,0xcd,0xde For IGEP BERLIN
smsc911x.mac1 Configure Board Ethernet Mac Address =0xb2,0xb0,0x14,0xb5,0xcd,0xdf For IGEP BERLIN (only with IGEP PROTON)
smsc911x.mac Configure Board Ethernet Mac Address =0xb2,0xb0,0x14,0xb5,0xcd,0xde For IGEPv2, IGEP PROTON, IGEP PARIS and IGEP BERLIN
ubi.mtd Fot UBI FS boot - -
root Configure root directory for MMC, NFS or UBI  ;For mmc memory
=/dev/mmcblk0p2 rw rootwait
 ;For flash memory
=/dev/mtdblock2
nfsroot For NFS boot - -
rootfstype For UBI FS boot - -
ip For NFS boot - -
init Assign init program - -
musb_hdrc.debug USB debug - -
musb_hdrc.use_dma USB over network - -
libertas.libertas_debug Configure libertas debug - -
board.ei485 Enable/disable RS485  ;Enable RS485
=yes
 ;Disable RS485
=no
board.modem Enable/disable GPRS modem  ;Enable modem (IGEPv2 Expansion)
=no
 ;Enable modem (IGEPv2 Expansion)
=yes
buddy.revision Enable hardware buddy revision [A or B] Only for base0010
=A
Only for base0010
=B

How to use GPIOs (update it)

Overview

This How-To is meant to be a starting point for people to learn use GPIOs for IGEP devices as quickly and easily as possible. For this how-to i used IGEP firmware Yocto

There are more ways to use GPIOs in IGEP v2, but this one is very simple.

Feedback and Contributing

At any point, if you see a mistake you can contribute to this How-To.

Install binaries via IGEP

Log with root user to install binaries.

Install module

Go to:$/modules and insert user-gpio-drv.ko into linux kernel with the following command:

insmod user-gpio-drv.ko

Check that user-gpio-drv.ko is currently loaded with the following command:

lsmod

The result will be similar at that:

root@localhost:~/gpio-driver/module# lsmod
Module                  Size  Used by
user_gpio_drv           1639  0 
omap_wdt                3411  0 
spidev                  4198  0 
iommu                   8558  0 
rtc_twl                 4411  0 
rtc_core               11187  1 rtc_twl
twl4030_keypad          2970  0 

The module is loaded until system halt.

Install shared library

Go to:$/lib. libgpio.so is here.

If a program is linked with shared libraries, Kernel seek in specific paths when program is executed. Now is necessary link the libgpio.so path to the environment variable LD_LIBRARY_PATH, use the following command:

export LD_LIBRARY_PATH=/root/gpio-driver/lib/

Check that libgpio.so is linked correctly. Go to:$/gpio-driver/app, gpio program is here. Type next command:

ldd gpio 

ldd command, print shared library dependencies. The result will be similar at that:

root@localhost:~/gpio-driver/app# ldd gpio
	libgpio.so => /root/gpio-driver/lib/libgpio.so (0x40197000)
	libc.so.6 => /lib/libc.so.6 (0x401a0000)
	/lib/ld-linux.so.3 (0x4008a000)

The shared library is linked until system halt. Now you can execute gpio example program.

Testing driver

To make sure than driver works well, make the next test. I used GPIO_136(sdmmc2_dat4) and GPIO_137(sdmmc2_dat5) because IGEP v2 RC5(without WIFI) don't use them by default:

NOTE: For more information visit this page (under construction).

Configure Mux

Go to:/sys/kernel/debug/omap_mux, and change this mux configuration:

echo 0x104>sdmmc2_dat4
echo 0x104>sdmmc2_dat5

Use cat command to check it:

cat sdmmc2_dat4
cat sdmmc2_dat5

The result will be similar at that:

root@localhost:/sys/kernel/debug/omap_mux# cat sdmmc2_dat4
name: sdmmc2_dat4.gpio_136 (0x48002164/0x134 = 0x0104), b ae4, t NA
mode: OMAP_PIN_INPUT | OMAP_MUX_MODE4
signals: sdmmc2_dat4 | sdmmc2_dir_dat0 | NA | sdmmc3_dat0 | gpio_136 | NA | NA | safe_mode

and

root@localhost:/sys/kernel/debug/omap_mux# cat sdmmc2_dat5
name: sdmmc2_dat5.gpio_137 (0x48002166/0x136 = 0x0104), b ah3, t NA
mode: OMAP_PIN_INPUT | OMAP_MUX_MODE4
signals: sdmmc2_dat5 | sdmmc2_dir_dat1 | cam_global_reset | sdmmc3_dat1 | gpio_137 | hsusb3_tll_stp | mm3_rxdp | safe_mode

Note: OMAP_PIN_INPUT=Input/Output pin and OMAP_PIN_OUTPUT=Output pin, for Read/Write test you need the first one. GPIO is configured in mode 4.

Read/Write test

Link GPIO_136 and GPIO_137 with a wire, these pins are located in J990 connector with numbers 7 and 9. I use the next connector to join them:

Connector used readwrite test.JPG
All connected readwrite test.JPG


Now type next code:

root@localhost:~/gpio-driver/app# ./gpio input 136
root@localhost:~/gpio-driver/app# ./gpio output 137 0
root@localhost:~/gpio-driver/app# ./gpio get 136     
0
root@localhost:~/gpio-driver/app# ./gpio output 137 1
root@localhost:~/gpio-driver/app# ./gpio get 136     
1
root@localhost:~/gpio-driver/app# 

The results (CMOS Voltages: 0V-1V8):

GPIO value0 readwrite test.JPG
GPIO value1 readwrite test.JPG


The code above shows that driver works properly, GPIO_136 is configured like input and GPIO_137 is configured like output with value 0, when read GPIO_136 the result is 0. To make sure that works well, configure GPIO_137 with value 1, now GPIO_136 reads 1.
This driver have more options like IRQ, but is not explained here.