Outils pour utilisateurs

Outils du site


gumstixthomas

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
gumstixthomas [2013/10/28 16:21]
5.135.165.126 RAxjVnGRmquF
gumstixthomas [2013/10/28 22:26]
bvandepo ancienne révision (2013/10/28 16:16) restaurée
Ligne 1: Ligne 1:
-<href="http:/zaym-5381.ru/home/next/5">site</a> + 
-<href="http://credits-9303.ru/home/next/5">site</a> +=====A-Z Create your own bootable MicroSD Card (8GB)====== 
-<href="http://loan-9036.ru/home/next/5">site</a> +------------------------------------------------------- 
-<href="http://credit-8455.ru/home/next/5">site</a> + 
-<a href="http://dengi-2444.ru/home/next/5">site</a> +====Context==== 
-<a href="http://loans-3356.ru/home/next/5">site</a> + 
-<href="http://loan-8763.ru/home/next/5">site</a> +This document is guide for using a Gumstix computer-on-module by creating your own bootable MicroSD Card (8GB) 
-<href="http://dengi-1704.ru/home/next/5">site</a> + 
-<a href="http://dengi-9981.ru/home/next/5">site</a> +====Hardware==== 
-<href="http://zaym-5737.ru/home/next/5">site</a>+ 
 +-> Gumstix Overo COM : OMAP3 Chip with POP Memory (Processor), MicroSD card slot, ISP Camera connector, TPS65950 Power Management Chip, Bluetooth & WiFi Antennas ... 
 + 
 +-> Tobi expansion board : USB host, DVI-D (HDMI), Audio IN & OUT ... 
 + 
 +-> Cable : USB cable from console port to a USB port on your computer 
 + 
 +-> Power supply : 5V 
 + 
 +====Delete the partitions in a SD Card==== 
 + 
 +Context : We consider that we have a SD car adaptator (MicroSD to SD) 
 + 
 +-> Insert the SD card 
 +  ~$ dmesg 
 +=> We can see what happens, informations appears and we can see : //[17280329.634829]  sdc: sdc1 sdc2// (the SD card is "sdc" and there are 2 partitions inside "sdc1" and "sdc2"
 +  ~$ cd /dev 
 +  /dev$ ls 
 + 
 +=> The SD card appears in /dev/sdc (/dev/sdc1 ; /dev/sdc2) 
 +  /dev$ sudo fdisk /dev/sdc 
 +=> We can operate in the disk 
 + 
 +//[sudo] password for xxx :/
 + 
 +  Command (m for help): m 
 +=> Help mode 
 + 
 +//Command action 
 + 
 +a   toggle a bootable flag 
 + 
 +b   edit bsd disklabel 
 + 
 +c   toggle the dos compatibility flag 
 + 
 +d   delete a partition 
 + 
 +l   list known partition types 
 + 
 +m   print this menu 
 + 
 +n   add a new partition 
 + 
 +o   create a new empty DOS partition table 
 + 
 +p   print the partition table 
 + 
 +q   quit without saving changes 
 + 
 +s   create a new empty Sun disklabel 
 + 
 +t   change a partition's system id 
 + 
 +u   change display/entry units 
 + 
 +v   verify the partition table 
 + 
 +w   write table to disk and exit 
 + 
 +x   extra functionality (experts only)// 
 + 
 +=> Delete a partition 
 +  Command (m for help): d 
 +=> Choose the first 
 +  Partition number (1-4): 1 
 + 
 +  Command (m for help): d 
 +=> Choose the second 
 +  Partition number (1-4): 2 
 +=> See the partition table to check what we have done 
 +  Command (m for help): p 
 + 
 +//Disk /dev/sdc: 7973 MB, 7973371904 bytes 
 + 
 +255 heads, 63 sectors/track, 969 cylinders 
 + 
 +Units = cylinders of 16065 * 512 = 8225280 bytes 
 + 
 +Disk identifier: 0x000ebad0 
 + 
 +Device Boot      Start         End      Blocks   Id  System// 
 + 
 +=> We can see that the partitions don't appear (nothing is done yet), then we can operate (Write) 
 +  Command (m for help): w 
 +//The partition table has been altered! 
 + 
 +Calling ioctl() to re-read partition table. 
 + 
 +WARNING: Re-reading the partition table failed with error 16: Device or resource busy. 
 + 
 +The kernel still uses the old table. The new table will be used at 
 + 
 +the next reboot or after you run partprobe(8) or kpartx(8) 
 + 
 +Syncing disks./
 + 
 +=The partitions are deleted now 
 + 
 +-> Remove the SD card and insert it again 
 +  /$ cd /dev 
 +  /dev$ ls 
 + 
 +=> Partitions are well deleted 
 + 
 +====Partitioning the SD card==== 
 + 
 +The SD card needs to have two partitions :  
 + 
 +root   = MLO (boot-loader loader) + u-boot.bin (boot loader) + uImage (Linux kernel) 
 + 
 +rootfs = Images (Pre-built images for example or your own images) 
 + 
 +  /dev$ sudo umount /dev/sdc 
 +=> The mount command serves to attach the file system found on some device to the big file tree ; the umount command will detach it again 
 +  /dev$ sudo fdisk /dev/sdc 
 +=> We can perate in the disk 
 + 
 +  Command (m for help): m 
 +//Command action 
 + 
 +  toggle a bootable flag 
 + 
 +b   edit bsd disklabel 
 + 
 +c   toggle the dos compatibility flag 
 + 
 +d   delete a partition 
 + 
 +l   list known partition types 
 + 
 +m   print this menu 
 + 
 +n   add a new partition 
 + 
 +o   create a new empty DOS partition table 
 + 
 +p   print the partition table 
 + 
 +q   quit without saving changes 
 + 
 +s   create a new empty Sun disklabel 
 + 
 +t   change a partition's system id 
 + 
 +u   change display/entry units 
 + 
 +v   verify the partition table 
 + 
 +w   write table to disk and exit 
 + 
 +x   extra functionality (experts only) 
 + 
 +=Create a new empty DOS partition table (partition 1)// 
 +  Command (m for help): o 
 +//Building new DOS disklabel with disk identifier 0xc9aaa9e6. 
 + 
 +Changes will remain in memory only, until you decide to write them. 
 + 
 +After that, of course, the previous content won't be recoverable. 
 + 
 +Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)// 
 + 
 +=> See the partition table 
 +  Command (m for help): p 
 + 
 +//Disk /dev/sdc: 7973 MB, 7973371904 bytes 
 + 
 +246 heads, 62 sectors/track, 1021 cylinders 
 + 
 +Units = cylinders of 15252 * 512 = 7809024 bytes 
 + 
 +Disk identifier: 0xc9aaa9e6 
 + 
 +Device Boot      Start         End      Blocks   Id  System// 
 + 
 +=> Note the memory size = 7973371904 bytes 
 +  Command (m for help): x 
 +=> Choose the extra functionality 
 + 
 +=> Cylinder-head-sector, also known as CHS, was an early method for giving addresses to each physical block of data on a hard disk drive 
 + 
 +=> Choose 255 heads 
 +  Expert command (m for help): h 
 +  Number of heads (1-256, default 246): 255 
 +=> Choose 63 sectors 
 +  Expert command (m for help): s 
 +  Number of sectors (1-63, default 62): 63 
 +//Warning: setting sector offset for DOS compatiblity// 
 + 
 +=> Calculate the number of cylinders : memory size/heads/sectors/512 bytes per sector = 7973371904/255/63/512 
 + 
 +=> Choose 969 cylinders 
 + 
 +  Expert command (m for help): c 
 +  Number of cylinders (1-1048576, default 1021): 969 
 +=> Return to fdisk's main mode 
 +  Expert command (m for help): r 
 +=> Add a new partition 
 +  Command (m for help): n 
 +//Command action 
 + 
 +e   extended 
 + 
 +p   primary partition (1-4)// 
 +  p 
 +  Partition number (1-4): 1 
 +  First cylinder (1-969, default 1): 1 
 +  Last cylinder, +cylinders or +size{K,M,G} (1-969, default 969): +32M 
 +=> Change the partition type to FAT32 
 +  Command (m for help): t 
 +  Selected partition 1 
 +  Hex code (type L to list codes): cChanged system type of partition 1 to c (W95 FAT32 (LBA)) 
 +=> Mark it bootable 
 +  Command (m for help): a 
 +  Partition number (1-4): 1 
 +=> Create an ext3 partition (partition 2) 
 +  Command (m for help): n 
 +//Command action 
 + 
 +e   extended 
 + 
 +p   primary partition (1-4)// 
 +  p 
 +  Partition number (1-4): 2 
 +  First cylinder (6-969, default 6): 6 
 +  Last cylinder, +cylinders or +size{K,M,G} (6-969, default 969): 969 
 +=> See the partition table 
 +  Command (m for help): p 
 + 
 +//Disk /dev/sdc: 7973 MB, 7973371904 bytes 
 + 
 +255 heads, 63 sectors/track, 969 cylinders 
 + 
 +Units = cylinders of 16065 * 512 = 8225280 bytes 
 + 
 +Disk identifier: 0xc9aaa9e6 
 + 
 +Device Boot      Start         End      Blocks   Id  System 
 + 
 +/dev/sdc1                             40131    c  W95 FAT32 (LBA) 
 + 
 +/dev/sdc2                       969     7743330   83  Linux// 
 + 
 +=> So we have two partitions (1 FAT32 / 2 Ext3 Linux) 
 + 
 +=> Write 
 +  Command (m for help): w 
 +//The partition table has been altered! 
 + 
 +Calling ioctl() to re-read partition table. 
 + 
 +WARNING: If you have created or modified any DOS 6.x 
 + 
 +partitions, please see the fdisk manual page for additional 
 + 
 +information. 
 + 
 +Syncing disks.// 
 + 
 +=> Now we have to format the two partitions 
 +  /dev$ sudo mkfs.vfat -F 32 /dev/sdc1 -n FAT 
 +//mkfs.vfat 3.0.3 (18 May 2009)// 
 +  /dev$ sudo mkfs.ext3 /dev/sdc2 
 +//mke2fs 1.41.9 (22-Aug-2009) 
 + 
 +Filesystem label= 
 + 
 +OS type: Linux 
 + 
 +Block size=4096 (log=2) 
 + 
 +Fragment size=4096 (log=2) 
 + 
 +484800 inodes, 1935832 blocks 
 + 
 +96791 blocks (5.00%) reserved for the super user 
 + 
 +First data block=0 
 + 
 +Maximum filesystem blocks=1983905792 
 + 
 +60 block groups 
 + 
 +32768 blocks per group, 32768 fragments per group 
 + 
 +8080 inodes per group 
 + 
 +Superblock backups stored on blocks:  
 + 
 + 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 
 + 
 +Writing inode tables: done// 
 +  Creating journal (32768 blocks): done 
 +//done// 
 +  Writing superblocks and filesystem accounting information: ^[done 
 +//done 
 + 
 +This filesystem will be automatically checked every 26 mounts or 
 + 
 +180 days, whichever comes first.  Use tune2fs -c or -i to override. 
 + 
 +bash: syntax error near unexpected token `done' 
 + 
 +The program 'one' is currently not installed.  You can install it by typing: 
 + 
 +sudo apt-get install opennebula 
 + 
 +one: command not found// 
 + 
 +=> Two partitions are created and they are formated 
 + 
 +=> Check the SD card 
 + 
 +-> system -> administration -> disk utility 
 + 
 +=> We can see the 8GB SD card with two partitions 
 + 
 +//FAT  
 + 
 + partition 1 
 + 
 + 41 MB / 41,094,144 bytes 
 + 
 + Type W95 FAT32 (LBA)(0x0c) 
 + 
 + Bootable 
 + 
 +7.9 GB Filesystem 
 + 
 + partition 2 
 + 
 + 7.9 Gb / 7,929,169,920 bytes 
 + 
 + type linux Ext3 (0x83)// 
 + 
 +=> Rename the two partitions : System -> Administration -> Disk utility 
 + 
 +   Select the partition 1 FAT  -> Mountable Filesystem -> Label "root"   -> Change 
 + 
 +   Select the partition 2 EXT3 -> Mountable Filesystem -> Label "rootfs" -> Change 
 + 
 +-> Unplug the SD card 
 + 
 +====Installing the Boot Files==== 
 + 
 +-> Download the last updated "Tested, Stable Images" (Pre-built factory images for the example) or build your own images 
 + 
 +   http://gumstix.org/software-development/pre-built-images.html 
 + 
 +=> You may be routed to : http://cumulus.gumstix.org/images/angstrom/factory/ 
 + 
 +=> We have download the images into /home/thomas/prebuilt 
 + 
 +  ~/prebuilt$ ls 
 +//Images      oe-commit-id.txt                               uImage.htm 
 + 
 +md5sum.txt  omap3-desktop-nand-image-overo-booted.tar.bz2 
 + 
 +MLO         u-boot.bin// 
 + 
 +=> You can see the download files 
 + 
 +-> Insert the SD card 
 + 
 +=> Two windows may appear (2 partitions) 
 +  /$ cd media 
 +  /media$ ls 
 +//cdrom  cdrom0  ROOT  rootfs  System// 
 + 
 +=> They are the two partitions ROOT & rootfs 
 +  /$ sudo mount /dev/sdc1 /media/ROOT 
 +=> It may be made yet 
 + 
 +=> Returns in the file with downloads /home/thomas/prebuilt 
 + 
 +=> Copy all the download files in the partition 1 (begin with the MLO file !!!) 
 +  ~/prebuilt$ sudo cp MLO /media/ROOT/MLO 
 +  ~/prebuilt$ sudo cp u-boot.bin /media/ROOT/u-boot.bin 
 +  ~/prebuilt$ sudo cp uImage.htm /media/ROOT/uImage 
 +  ~/prebuilt$ sudo umount /dev/sdc1 
 +=> Check that it is well unmounted 
 +  /media$ ls 
 +//cdrom  cdrom0  rootfs  System// 
 + 
 +=> At this point you have a bootable FAT partition 
 +  /media$ sudo mount /dev/sdc2 /media/rootfs 
 +=> Go on /home/thomas/prebuilt 
 +  ~/prebuilt$ ls 
 +//Images      oe-commit-id.txt                               uImage.htm 
 + 
 +md5sum.txt  omap3-desktop-nand-image-overo-booted.tar.bz2 
 + 
 +MLO         u-boot.bin// 
 + 
 +=> Copy the images files in the partition 2 
 +  ~/prebuilt$ sudo cp omap3-desktop-nand-image-overo-booted.tar.bz2 /media/rootfs 
 +=> Go on the partition 2 (rootfs) 
 +  /media/rootfs$ ls 
 +//lost+found  omap3-desktop-nand-image-overo-booted.tar.bz2// 
 + 
 +=> tar = file grouping = archive ; bz2 = compressed archive 
 + 
 +=> unzip and unarchive the file 
 +  sudo tar -xvaf omap3-desktop-nand-image-overo-booted.tar.bz2 
 +=> It takes around 15 minutes 
 + 
 +=> Remove the compressed archive file 
 +  /media/rootfs$ sudo rm omap3-desktop-nand-image-overo-booted.tar.bz2 
 +=> unmount the partition 2 
 +  /media$ sudo umount /dev/sdc2 
 +-> Unplug the SD card 
 + 
 +====Setting up a Serial Connection==== 
 + 
 +-> Insert the MicroSD card into the Gumstix Overo COM 
 + 
 +-> Plug the USB cables (expansion board - computer) 
 +  /$ cd dev 
 +  /dev$ ls 
 + 
 +=> We can see it : ttyUSB0 
 + 
 +=> Run Minicom (communication program) 
 +  /$ minicom -s 
 +=> Under "Serial Port Setup" choose the following 
 + 
 + * Serial Device: /dev/ttyS0 (edit to match your system as necessary) 
 + 
 + * Bps/Par/Bits: 115200 8N1 
 + 
 + * Hardware Flow Control: No (this is important) 
 + 
 + * Software Flow Control: No 
 + 
 +=Hit [ESC] until you return to the main configuration menu 
 + 
 +=> Select "Save Setup as dfl" to save the default setup 
 + 
 +=> Select "Exit from Minicom" to exit the program 
 + 
 +=> Run Minicom 
 +  /$ minicom -o 
 +=> Power on the board (5V) and wait 
 + 
 +=> The device demands the username (maybe the password) 
 +  overo login: root 
 +=> It works, you can move into the tree 
 +  root@overo:~# cd / 
 +  root@overo:/# ls 
 +  bin   dev  home  linuxrc     media  proc  sys  usr                               
 +  boot  etc  lib   lost+found  mnt    sbin  tmp  var   
 +=> To turn off the Gumstix Overo COM                             
 +  root@overo:/# shutdown 0 
 +                                                                                 
 +//Broadcast message from root (ttyS2) (Mon Mar 28 06:59:10 2011):                  
 +                                                                                 
 +The system is going down to maintenance mode NOW!        
 +                         
 +INIT: Switching to runlevel: 1        
 + 
 +INIT: Sending processes the TERStopping OpenBSD Secure Shell server: sshd.  
 +      
 +[ ok ]pping Avahi mDNS/DNS-SD Daemon: avahi-daemon                          
 +      
 +Stopping Bluetooth subsystem: hidd pand dund rfcomm hid2hci bluetoothd hciattac. 
 + 
 +Stopping advanced power management daemon: No /usr/sbin/apmd found running; non. 
 + 
 +apmd.                                               
 +                              
 +Stopping Hardware abstraction layer hald             
 +                             
 +Stopping system message bus: dbus.                   
 +                             
 +Stopping GPE display manager: gpe-dm                    
 +                         
 +Stopping ntpd: done                                    
 +                           
 +Stopping Network connection manager daemon: NetworkManager.     
 +                  
 +Deconfiguring network interfaces... done.                    
 +                     
 +Stopping portmap daemon: portmap.               
 +                                  
 +Stopping syslog-ng:                         
 +                                    
 +INIT: no more processes left in this runlevel// 
 + 
 +=> The device is well stopped 
 + 
 +=> Quit the Minicom program 
 +  [CTRL - a] [z] [q] [YES] 
 +-Unplug the power supply 
 + 
 +-> Unplug the USB cables 
 + 
 +--------------------------------------------------------------------------- 
 +======A-Z Build your own complete Linux Distribution for embedded systems====== 
 +--------------------------------------------------------------------------- 
 + 
 +====Context==== 
 + 
 +There are three files required on the first (FAT) partition to boot your Overo 
 + 
 +- MLO        : the boot-loader loader 
 + 
 +- u-boot.bin : the boot loader 
 + 
 +- uImage     : the Linux kernel 
 + 
 +You can build these yourself or download pre-built images but these three files must be named as stated above 
 + 
 +====What is Openembedded==== 
 + 
 +Openembedded is the build framework for embedded Linux 
 + 
 +OpenEmbedded  is set of metadata used to cross-compile, package and install software packages 
 + 
 +OpenEmbedded is being used to build and maintain a number of embedded Linux distributions 
 + 
 +OpenEmbedded provides a powerful means of creating customized root file systems and cross-compiling, packaging, and deploying software 
 + 
 +Définition du rapport de Guillaume : 
 + 
 +Open Embedded est un outil qui gère les différentes versions de Linux et qui met à disposition les fichiers utiles 
 + 
 +pour la création d’un noyau Linux pour les applications embarquées. C’est un des meilleurs outils pour la gestion de 
 + 
 +la compilation croisée. Il permet aux développeurs de créer leur propre distribution de Linux pour les systèmes 
 + 
 +embarqués. Une grande communauté de développeurs utilise et améliore les versions de Linux, Open Embedded permet de 
 + 
 +télécharger les dernières versions stables et met à disposition de nouvelles versions régulièrement. Open Embedded 
 + 
 +met  également des versions de Linux pré-compilées à disposition, dans ce cas on ne peut faire aucune modification du 
 + 
 +noyau Linux. Ceci est utile afin d’effectuer des tests sans se préoccuper de la compilation du noyau, on dispose 
 + 
 +alors d’une image de Linux compilée par Open Embedded. 
 + 
 +====What is Bitbake==== 
 + 
 +Bitbake is a tool for executing tasks and managing metadata 
 + 
 +At the heart of OE is the Bitbake tool which resolves dependencies between different software packages in order to build a complete embedded system as make is to source code 
 + 
 +Although BitBake can build individual packages, it is often more useful to build a set of packages and combine them into an image 
 + 
 +The OpenEmbedded (OE) system consists of a collection of·BitBake "recipes" 
 + 
 +Gumstix uses the OpenEmbedded build environment so developers can create a complete Linux Distribution for embedded systems 
 + 
 +Définition de Guillaume : 
 + 
 +Bitbake est un outil qui permet de compiler et de faire de la compilation croisée avec les fichiers utiles à la 
 + 
 +création d’un noyau Linux. Cet outil est à la base de Open Embedded, il permet d’exécuter les différentes tâches 
 + 
 +utiles à la création d’une image Linux. Pour la création du noyau Linux, Open Embedded utilise un système de recette, 
 + 
 +elles permettent de compiler chaque partie du noyau Linux. Une recette est une succession de tâches à ex exécuter, 
 + 
 +Bitbake permet exécuter ces tâches une à une et de gérer les indépendances entre les tâches. 
 + 
 +-> Basic variable setting 
 +  VARIABLE = "value" 
 +=> VARIABLE is value 
 + 
 +-> Variable expansion 
 +  A = "aval" 
 +  B = "pre${A}post" 
 +=> A containing aval and B containing preavalpost 
 + 
 +-> Immediate variable expansion := (le contenu d'une variable est élargi ; elle a déjà qqchose, mais on lui rajoute des infos) 
 +  C = "cval" 
 +  C := "${C}append" 
 +=> C would be cvalappend 
 + 
 +-> Appending += and prepending =+  = ajouter des préfixes et suffixes au contenu d'une variable 
 +  B = "bval" 
 +  B += "additionaldata" 
 +  C = "cval" 
 +  C =+ "test" 
 +=> B is now bval additionaldata and C is test cval 
 + 
 +-> Appending .= and prepending =. without spaces = même chose que += et =+ sans les espaces 
 +  B = "bval" 
 +  B .= "additionaldata" 
 +  C = "cval" 
 +  C =. "test" 
 +=> B is now bvaladditionaldata and C is testcval 
 + 
 +-> Conditional metadata set 
 +  OVERRIDES is a “:” seperated variable containing each item you want to satisfy conditions 
 +  OVERRIDES = "architecture:os:machine" 
 +  TEST = "defaultvalue" 
 +  TEST_os = "osspecificvalue" 
 +  TEST_condnotinoverrides = "othercondvalue" 
 +=> TEST would be osspecificvalue, due to the condition “os” being in OVERRIDES 
 + 
 +-> Conditional appending 
 +  DEPENDS = "glibc ncurses" 
 +  OVERRIDES = "machine:local" 
 +  DEPENDS_append_machine = " libmad" 
 +=> DEPENDS is set to glibc ncurses libmad 
 + 
 +-> Inclusion 
 + 
 +//include// directive, which causes BitBake to parse in whatever file you specify, and insert it at that location 
 + 
 +-> Requiring Inclusion 
 + 
 +//require// will raise an ParseError if the to be included file can not be found. 
 + 
 +-> Defining executable metadata (only supported in .bb and .bbclass files.) 
 +  do_mytask () { 
 +    echo "Hello, world!" 
 +  } 
 + 
 +-> Inheritance 
 + 
 +//inherit// directive is a means of specifying what classes of functionality your .bb requires 
 + 
 +-> Tasks (only supported in .bb and .bbclass files.) 
 + 
 +=> Each step that needs to be run for a given .bb is known as a task 
 + 
 +=> There is a command //addtask// to add new tasks (must be a defined python executable metadata and must start with “do_”) and describe intertask dependencies 
 +  python do_printdate () { 
 +    import time 
 +    print time.strftime('%Y%m%d', time.gmtime()) 
 +  } 
 +  addtask printdate before do_build 
 +=> defines the necessary python function and adds it as a task which is now a dependency of do_build  
 + 
 +-> Events (only supported in .bb and .bbclass files.) 
 + 
 +BitBake allows to install event handlers (gestionnaires d'évenements) 
 + 
 +Events are triggered at certain points during operation, such as, the beginning of operation 
 +  addhandler myclass_eventhandler 
 +  python myclass_eventhandler() { 
 +    from bb.event import NotHandled, getName 
 +    from bb import data 
 + 
 +    print "The name of the Event is %s" % getName(e) 
 +    print "The file we run for is %s" % data.getVar('FILE', e.data, True) 
 + 
 +    return NotHandled 
 +  } 
 + 
 +A BitBake (.bb) file is a logical unit of tasks to be executed. Normally this is a package to be built. 
 +  bbread  = command for displaying BitBake metadata 
 +  bitbake = primary command in the system - executing a given task 
 +Executing a task with a single .bb (executer une commande bitbake sur un seul fichier.bb) 
 +  bitbake -b fil.bb 
 +  Executing tasks with a set of .bb files 
 +bitbake fil.bb 
 +  Executing tasks with a set of .bb files & continue as much as possible after an error 
 +  bitbake -k file.bb 
 + 
 +File Download supports : 
 + 
 +-> Local File Fetcher 
 +  SRC_URI= "file://relativefile.patch" 
 +-> CVS File Fetcher 
 +  SRC_URI = "cvs://CVSROOT;module=mymodule;tag=some-version;method=ext" 
 +-> HTTP/FTP Fetcher 
 +  SRC_URI = "http://oe.handhelds.org/not_there.aac;md5sum=12343" 
 +  SRC_URI = "ftp://oe.handhelds.org/not_there_as_well.aac;md5sum=1234" 
 +-> SVN Fetcher 
 +  SRC_URI = "svn://svn.oe.handhelds.org/svn;module=vip;proto=http;rev=667" 
 +-> GIT Fetcher 
 +  SRC_URI = "git://git.oe.handhelds.org/git/vip.git;tag=version-1" 
 + 
 +Git is a free & open source, distributed version control system  designed to handle everything from small to very large projects with speed and efficiency 
 + 
 +Git est un logiciel de gestion de versions décentralisée 
 + 
 +-> Bitbake command needed to build a particular piece of software 
 + 
 +bitbake x-load                        MLO (OMAP3 bootstrap loader) 
 + 
 +bitbake u-boot-omap3                u-boot (boot loader) 
 + 
 +bitbake virtual/kernel                linux kernel 
 + 
 +bitbake omap3-console-image        Gumstix console image 
 + 
 +bitbake omap3-palmtop-image        Gumstix palmtop image 
 + 
 +bitbake omap3-desktop-nand-image       Gumstix desktop-nand image 
 + 
 +bitbake omap3-desktop-image        Gumstix desktop image 
 + 
 +bitbake sakoman-gnome-image        unofficial Gnome-based desktop image 
 + 
 +====Openembedded installation==== 
 + 
 +-> Create the "overo-oe" directory and change directory into it 
 +  /$ mkdir -p ~/overo-oe 
 +  /$ cd ~/overo-oe 
 +  ~/overo-oe$ pwd 
 +  /home/thomas/overo-oe 
 +-> Then we will install the OE metadata, and check out the Overo branch (you can safely ignore the warnings you will get from the git commands) 
 + 
 +(Git = distributed revision control system with a rich command set that provides both high-level operations and full access to internals 
 + 
 +logiciel de gestion de version décentralisée 
 + 
 +git clone = Clone a repository into a new directory) 
 + 
 +  ~/overo-oe$ git clone git://gitorious.org/gumstix-oe/mainline.git org.openembedded.dev 
 +//Initialized empty Git repository in /home/thomas/overo-oe/org.openembedded.dev/.git/ 
 + 
 +remote: Counting objects: 397395, done. 
 + 
 +remote: Compressing objects: 100% (123308/123308), done. 
 + 
 +remote: Total 397395 (delta 269982), reused 391595 (delta 264327) 
 + 
 +Receiving objects: 100% (397395/397395), 151.25 MiB | 280 KiB/s, done. 
 + 
 +Resolving deltas: 100% (269982/269982), done. 
 + 
 +Checking out files: 100% (24090/24090), done.// 
 + 
 +=> Files are downloaded around 1 hour 
 + 
 +=> org.openembedded.dev is downloaded 
 + 
 +(git-checkout (commande) : a branch or paths to the working tree 
 + 
 +--track                  : when creating a new branch, set up "upstream" configuration 
 + 
 +-b                       : create a new branch named <new_branchand start it at <start_point>
 + 
 +-> Enter in the file 
 +  ~/overo-oe$ cd org.openembedded.dev 
 +  ~/overo-oe/org.openembedded.dev$ git checkout --track -b overo origin/overo 
 +//Branch overo set up to track remote branch overo from origin. 
 + 
 +Switched to new branch 'overo'// 
 + 
 +====BitBake installation==== 
 + 
 +  ~/overo-oe/org.openembedded.dev$ cd ~/overo-oe 
 +  ~/overo-oe$ pwd 
 +  /home/thomas/overo-oe 
 +  ~/overo-oe$ git clone git://git.openembedded.net/bitbake bitbake 
 + 
 +//remote: Counting objects: 15674, done. 
 + 
 +remote: Compressing objects: 100% (4782/4782), done. 
 + 
 +remote: Total 15674 (delta 9560), reused 15600 (delta 9517) 
 + 
 +Receiving objects: 100% (15674/15674), 2.81 MiB | 42 KiB/s, done. 
 + 
 +Resolving deltas: 100% (9560/9560), done.// 
 + 
 +=It takes around 1 minute 
 + 
 +  ~/overo-oe$ cd bitbake 
 +  ~/overo-oe/bitbake$ git checkout 1.10.2 
 + 
 +====Creating the OE configuration files and profile==== 
 + 
 +We now will create profile script and the configuration files required to tailor OE to our needs 
 + 
 +-> Copy these files (-r, --recursive = copy directories recursively) 
 +  ~/overo-oe$ cp -r org.openembedded.dev/contrib/gumstix/build . 
 +=> The '.' is important here 
 + 
 +====Environment setup==== 
 + 
 +OpenEmbedded requires some environment setup in order to function properly 
 + 
 +You can set this up via your bash profile 
 + 
 +=> bashrc is run when you open a Terminal 
 + 
 +-> Copy (.bak = backup = save file) 
 +  ~/overo-oe$ cp ~/.bashrc ~/bashrc.bak 
 +(cat  affiche  sur  la sortie standard le contenu de chacun des fichiers indiqués 
 + 
 +(>>  redirige à la fin d'un fichier et le crée s'il n'existe pas) 
 +  ~/overo-oe$ cat ~/overo-oe/build/profile >> ~/.bashrc 
 +-> Close your terminal window and open a new one (so that the environment changes you enabled above will take effect) 
 + 
 +====First build==== 
 + 
 +You can build a basic kernel and non-gui root file system image in one step with 
 +  ~/overo-oe$ bitbake omap3-console-image 
 +You can build the kernel and modules using bit-bake. This allows you to incorporate the kernel with camera driver into an image of your design 
 + 
 +=> It takes a long time (around 2 days) and 40 GB to 60 GB 
 + 
 +=> At the end, you should have this directory layout (configuration) 
 + 
 +a file overo-oe where there is 
 + 
 +- bitbake                    #  contains the bitbake tool and its associated configuration files 
 + 
 +- build                      #  contains configuration data for the build system : # auto.conf is used primarily to specify what machine configuration the build is targeted toward # local.conf is used to specify build policy # site.conf is used for general configuration 
 + 
 +- org.openembedded.snapshot  #  contains a snapshot of the OpenEmbedded development branch ; it contains the "recipes" to build many hundreds of software packages 
 + 
 +- com.gumstix.collection     #  contains overrides to the standard OpenEmbedded recipes ; this is where all of the gumstix specific customizations reside 
 + 
 +- user.collection            #  this directory is yours to use ; you should place your custom recipes here 
 + 
 +- extras                     #  contains a variety of useful, related material 
 + 
 +- tmp                        #  where the build system keeps its working files and also where it places the output of the build 
 + 
 +..- cache                    #  where bitbake caches information it obtains from parsing all available .bb files 
 + 
 +..- stamps                   #  contains zero length files that are used to track each phase of the build as it is completed 
 + 
 +..- cross                    #  contains the cross development tools for generating code for the gumstix procesor (compliers, linkers, etc.) 
 + 
 +..- staging  (mise en scene) #  Header files, libraries, and other items needed by the build system are stored in this directory 
 + 
 +..- work                     #  where the real work gets done ; a subdirectory is created for each package that is built 
 + 
 +..- rootfs                   #  after an image recipe build this directory will contain the complete root file system for the image 
 + 
 +..- deploy                   #  contains the final output of the build process : a set of images and ipkg files 
 + 
 +====Writing a .bb file==== 
 + 
 +=> A bitbake recipe is a set of instructions that describes what needs to be done to : 
 + 
 +- retrieve the source code for some application 
 + 
 +- apply any necessary patches 
 + 
 +- provide any additional files (such as init scripts) 
 + 
 +- compile it 
 + 
 +- install it 
 + 
 +- generate binary packages 
 + 
 +=> The end result is a binary package that you can install on your target device 
 + 
 +(If you need a customized root filesystem) 
 + 
 +-> Package description, license, etc 
 +  DESCRIPTION = "My first application, a really cool app containing lots of foo and bar" 
 +  LICENSE = "GPLv2" 
 +  HOMEPAGE = "http://www.host.com/foo/" 
 +-> The next step is to specify what the package needs to build and run, the so called dependencies 
 +  DEPENDS = "gtk+" 
 +  RDEPENDS = "cool-ttf-fonts" 
 +=> The package needs gtk+ to build ('DEPENDS') and requires the 'cool-ttf-fonts' package to run 
 + 
 +=> You need to specify everything else by yourself, which in this case is the 'cool-ttf-fonts' package 
 + 
 +=> OE will know what to build before trying to build your application 
 + 
 +-> Add the source location 
 +  SRC_URI = "http://www.host.com/foo/files/${P}.tar.bz2;md5sum=yoursum" 
 +=> This will tell the fetcher where to download the sources from and it will check the integrity using md5sum if you provided the appropriate yoursum 
 + 
 +-> You can make one by doing 
 +  md5sum foo-1.9.tar.bz2 
 + 
 +-> replace yoursum with the md5sum on your screen. A typical md5sum will look like this 
 + 
 +//a6434b0fc8a54c3dec3d6875bf3be868// 
 + 
 +=> Before we can move to the actual building we need to find out which build system the package is using inherit autotools pkgconfig 
 + 
 +->  Lets start the build 
 +  bitbake foo 
 + 
 +=> The following files where installed but not shipped = /usr/weirdpath/importantfile.foo 
 + 
 +=> OE has a standard list of paths which need to be included, but it can't know everything, so we have to tell OE to include that file as well  
 +  FILES_${PN} += "/usr/weirdpath/importantfile.foo" 
 + 
 +Syntax of recipes : 
 + 
 +- Functions (series of actions to be performed) 
 +  do_install () { 
 +    autotools_do_install 
 +    install -d ${D}${base_bindir} 
 +    mv ${D}${bindir}/sed ${D}${base_bindir}/sed.${PN} 
 +  } 
 +- Variable assignments and manipulations 
 +  S = "${WORKDIR}/postfix-${PV}" 
 +  PR = "r4" 
 +  CFLAGS += "-DNO_ASM" 
 +  SRC_URI_append = "file://fixup.patch" 
 +- Keywords 
 +  export POSTCONF = "${STAGING_BINDIR}/postconf" 
 +  inherit autoconf 
 +  require otherfile.inc 
 +- Comments 
 +  # This is a comment 
 +- Line continuation: \ = To split a statement over multiple lines you should place a \ at the end of the line that is to be continued on the next line 
 +  VAR = "A really long \ 
 +         line" 
 +- Using variables: ${...} = To access the contents of a variable you need to access it via ${<varname>}: 
 +  SRC_URI = "${SOURCEFORGE_MIRROR}/libpng/zlib-${PV}.tar.gz" 
 +- Quote all assignments = All variable assignments should be quoted with double quotes 
 +  VAR1 = "${OTHERVAR}" 
 +- Conditional assignment = is used to assign a value to a variable, but only when the variable is currently unset (commonly used to provide a default value) 
 +  VAR1 = "Original value" 
 +  VAR1 ?= "New value" 
 +=Will set VAR1 to "New value" if it is currently empty (vide) 
 + 
 +=> VAR1 is left with the value "Original value" 
 +- Appending: +=    = You can append values to existing variables 
 +  SRC_URI += "file://fix-makefile.patch" 
 +- Prepending: =+   = You can prepend values to existing variables 
 +  VAR =+ "Starts" 
 +- Appending: _append = You can append values to existing variables 
 +  SRC_URI_append = " file://fix-makefile.patch" 
 +  SRC_URI_append += "file://fix-install.patch" 
 +- Prepending: _prepend = You can prepend values to existing variables 
 + 
 +Expected format of recipe name : 
 + 
 +<package-name>_<version>.bb 
 + 
 +for example : strace_4.5.14.bb 
 + 
 +====Bitbake Tutorial Example==== 
 + 
 +OpenEmbedded provides a powerful means of creating customized root file systems and cross-compiling, packaging, and deploying software 
 + 
 +to harness this power, it is necessary to write Bitbake recipes !!! 
 + 
 +This tutorial steps through the creation of a basic recipe---the configuration file that tells Bitbake how to build your source code 
 + 
 +Making a hello.c file with the following content : 
 + 
 +-> Create a directory for our recipe, recipes/myhelloworld, and we've created files subdirectory in there to store our local files 
 +  $ mkdir recipes/myhelloworld 
 +  $ mkdir recipes/myhelloworld/files 
 +  $ cat recipes/myhelloworld/files/myhelloworld.c 
 +  #include <stdio.h> 
 +  int main() 
 +  { 
 +        printf("Hello world!\n"); 
 +        return 0; 
 +  } 
 +  ^D 
 +  $ cat > recipes/myhelloworld/files/README.txt 
 +  Readme file for myhelloworld. 
 +  ^D 
 +=> We've created two local files, the C source code for our helloworld program and readme file 
 + 
 +-> Create the bitbake recipe helloworld_0.0.bb 
 +  DESCRIPTION = "hello world program"  # describe this package 
 +  PR = "r0"                            # specifies the package revision 
 +  SRC_URI = "file://hello.c"           # specifies where the source code can be found (here the same directory as our recipe file) 
 +  S = "${WORKDIR}"                     # refers to the directory where Bitbake unpacks the source ; by default the WORKDIR 
 +  do_compile () {                      # it gives the details of how to compile the package (use standard C cross-compiler ... ; output file = hello ; source file = hello.c ; binary sitting in S) 
 +   ${CC} ${CFLAGS} ${LDFLAGS} -o hello hello.c 
 +  } 
 +  do_install () { 
 +   install -d ${D}${bindir}/ 
 +   install -m 0755 ${S}/hello ${D}${bindir}/ 
 +  } 
 +  FILES_${PN} = "${bindir}/hello"      # Linux install command (create the directory where we wish to our hello program if the directory doesn't yet exist and then asks it to copy our application to this directory) 
 + 
 +(Bitbake builds a recipe by executing a series of steps: fetching code, unpacking, compiling, linking, staging, and packaging 
 + 
 +If our code needs a library to compile, we specify this using the DEPENDS or the RECOMMENDS keyword in our recipe 
 + 
 +To specify runtime dependencies, use the RDEPENDS and RRECOMMENDS keywords 
 + 
 +The PROVIDES and RPROVIDES variables are, correspondingly, the names given to your recipe in case other packages rely on your package) 
 + 
 + 
 +-> Build the package 
 +  $ bitbake -b recipes/myhelloworld/myhelloworld_0.0.bb 
 +=> The package was successfully built, the output consists of two .ipkg files, which are ready to be installed on the target 
 + 
 +-> Look at the working directory to see where various files ended up 
 +  $ find tmp/work/myhelloworld-0.0-r0 
 +=> The two source files are in tmp/work/myhelloworld-0.0-r0, which is the working directory as specified via the ${WORKDIR} variable 
 + 
 +=> There's an image directory at tmp/work/myhelloworld-0.0-r0/image ; this is actually the destination directory, as specified via the ${D} variable 
 + 
 +=> The program was actually compiled in the tmp/work/myhelloworld-0.0-r0/myhelloworld-0.1 directory (this is the source directory as specified via the ${S} variable) 
 + 
 +-> Check that we really did produce a binary for the target and not for our host system 
 +  $ file tmp/work/myhelloworld-0.0-r0/install/myhelloworld/usr/bin/myhelloworld 
 +//tmp/work/myhelloworld-0.0-r0/install/myhelloworld/usr/bin/myhelloworld: ELF 32-bit LSB executable, Hitachi SH, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), for GNU/Linux 2.4.0, not stripped// 
 +  $ file /bin/ls 
 +///bin/ls: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), for GNU/Linux 2.4.0, stripped// 
 + 
 +=> This shows us that the helloworld program is for an SH processor 
 + 
 +----------------------------------------------------- 
 +======A-Z Boot with own built files on MicroSD Card====== 
 +----------------------------------------------------- 
 + 
 +====Context==== 
 + 
 +There are three files required on the first (FAT) partition to boot your Overo 
 + 
 +- MLO        : the boot-loader loader 
 + 
 +- u-boot.bin : the boot loader 
 + 
 +- uImage     : the Linux kernel 
 + 
 +We consider that we have built these images. 
 + 
 +====Load the images in the MicroSD==== 
 + 
 +-> MLO is not necessary 
 + 
 +-> Find u-boot and uImage : /home/thomas/overo-oe/tmp/deploy/glibc/images/overo 
 + 
 +  ~/overo-oe/tmp/deploy/glibc/images/overo$ ls 
 +//Angstrom-omap3-console-image-glibc-ipk-2010.7-test-20110411-overo.rootfs.tar.bz2 
 + 
 +Angstrom-omap3-console-image-glibc-ipk-2010.7-test-20110411-overo-testlab 
 + 
 +modules-2.6.36-r100-overo.tgz 
 + 
 +omap3-console-image-overo.tar.bz2 
 + 
 +u-boot-overo-2010.9+r1+git1e4e5ef0469050f014aee1204dae8a9ab6053e49-r1.bin 
 + 
 +u-boot-overo.bin 
 + 
 +uImage-2.6.36-r100-overo.bin 
 + 
 +uImage-overo.bin// 
 + 
 +-> Copy u-boot-overo.bin in the ROOT partition (1) and name it u-boot.bin 
 +  ~/overo-oe/tmp/deploy/glibc/images/overo$ sudo cp u-boot-overo.bin /media/ROOT/u-boot.bin 
 +-> Copy uImage-overo.bin in the ROOT partition (1) and name it uImage 
 +  ~/overo-oe/tmp/deploy/glibc/images/overo$ sudo cp uImage-overo.bin /media/ROOT/uImage 
 +-> Unmount the ROOT partition 
 +  ~/overo-oe/tmp/deploy/glibc/images/overo$ sudo umount /dev/sdc1 
 +-> Copy omap3-console-image-overo.tar.bz2 in the rootfs partition (2) 
 +  ~/overo-oe/tmp/deploy/glibc/images/overo$ sudo cp omap3-console-image-overo.tar.bz2 /media/rootfs 
 +-> Untar it 
 +  /media/rootfs$ sudo tar -xvaf omap3-console-image-overo.tar.bz2 
 +-> You can remove omap3-console-image-overo.tar.bz2 if you want 
 + 
 +-> Unmount the rootfs partition 
 +  /media$ sudo umount /dev/sdc2 
 +-> If you want to set up a serial connection, go on "Setting up a Serial Connection" 
 + 
 +----------------------------------------------------------------------- 
 +======A-Z Incorporate the kernel with MT9V032 Caspapx camera driver====== 
 +----------------------------------------------------------------------- 
 + 
 +====Context==== 
 + 
 +We want to plug a module camera CMOS APTINA mt9v032/mt9v034 caspa px with the Gumstix 
 + 
 +====Build the kernel and modules using bit-bake==== 
 + 
 +This allows you to incorporate the kernel with camera driver into an image of your design 
 + 
 +  ~/overo-oe/org.openembedded.dev$ git pull origin overo 
 +=git-pull = Fetch from and merge with another repository or a local branch 
 +  ~/overo-oe/org.openembedded.dev$ bitbake linux-omap3-caspapx 
 +... 
 + 
 +//When the build completes, the kernel and modules will appear in ~/overo-oe/tmp/deploy/glibc/images/overo// 
 + 
 +---------------------------------------------------------------- 
 +=====A-Z Customize the camera driver and kernel for our needs===== 
 +---------------------------------------------------------------- 
 + 
 +====Context==== 
 + 
 +We want to plug a module camera CMOS APTINA mt9v032/mt9v034 caspa px with the Gumstix 
 + 
 +The version of the kernel is here 2.6.34 
 + 
 +====Tasks==== 
 + 
 +-> Get the kernel source that and create a new branch from the recipe SRCREV 
 +  $ cd ~ 
 +  $ git clone git://www.sakoman.com/git/linux-omap-2.6.git 
 +  $ cd linux-omap-2.6 
 +  $ git checkout -b 2.6.34 cb89736af28f583598e49a05249334a194d00f1d 
 +-> Get the patch 
 +  $ wget http://cumulus.gumstix.org/sources/mt9v032-2.6.34.patch 
 +  $ patch -p1 mt9v032-2.6.34.patch 
 +-> Get the kernel configuration 
 +  $ wget http://cumulus.gumstix.org/sources/mt9v032-2.6.34.defconfig 
 +  $ cp mt9v032-2.6.34.defconfig .config 
 +-> Rebuild 
 +  $ bitbake omap3-console-image 
 +-> Add the cross compiler to your path and configure the kernel 
 + 
 +=> It depends on the number of bits of the kernel ; if you don't know, use "uname -a" command 
 + 
 +32-bit processors =C'est notre cas 
 +  $ export PATH=/home/<username>/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin:${PATH}  
 +64-bit processors 
 +  $ export PATH=/home/<username>/overo-oe/tmp/sysroots/x86_64-linux/usr/armv7a/bin:${PATH} 
 +-> Build the kernel and the modules 
 +  $ make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage 
 +  $ make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- modules 
 +-> Install the modules 
 +  $ mkdir ~/linux-omap-2.6/modules 
 +  $ make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- INSTALL_MOD_PATH=./modules modules_install 
 +-> Test the new driver 
 +  #! /bin/bash  
 +  TARGET_OVERO="root@10.0.1.15" 
 +  make -j8 ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- modules 
 +  ssh $TARGET_OVERO 'rmmod mt9v032' 
 +  scp drivers/media/video/mt9v032.ko $TARGET_OVERO:/lib/modules/2.6.34/kernel/drivers/media/video/ 
 +  ssh $TARGET_OVERO 'insmod /lib/modules/2.6.34/kernel/drivers/media/video/mt9v032.ko' 
 +  ssh $TARGET_OVERO 'mplayer -display :0.0 tv:// -tv driver=v4l2:device=/dev/video0' 
 + 
 +--------------------------------------------------- 
 +=====A-Z Use the camera driver in 2.6.36 version===== 
 +--------------------------------------------------- 
 + 
 +====Context==== 
 + 
 +We want to plug module camera CMOS APTINA mt9v032/mt9v034 caspa px with the Gumstix 
 + 
 +The version of the kernel is here 2.6.36 
 + 
 +The camera drivers are made for 2.6.34 version 
 + 
 +We want to modify the driver and patch 2.6.34 -> 2.6.36 
 + 
 +====Tasks==== 
 + 
 +In comparison with "A-Z Customize the camera driver and kernel for our needs" 
 + 
 +-> We have the kernel source and we have modified the name of the folder 
 +  $ cd linux-omap-2.6-thomas 
 +  $ git checkout -b 2.6.36 6673cc25f781e61cb2d20e2a830047959d3f7801 
 +-> Get the patch (if you don't have it yet) 
 +  $ wget http://cumulus.gumstix.org/sources/mt9v032-2.6.34.patch 
 +  $ patch -p1 < mt9v032-2.6.34.patch 
 +-> Rename it "mt9v032-2.6.36.patch" 
 + 
 +We have removed : 
 + 
 +< diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile 
 + 
 +< index d28e9e5..e1e4a0c 100644 
 + 
 +< --- a/arch/arm/mach-omap2/Makefile 
 + 
 +< +++ b/arch/arm/mach-omap2/Makefile 
 + 
 +< @@ -89,7 +89,7 @@ obj-$(CONFIG_OMAP3_EMU) += emu.o 
 + 
 +<  obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox_mach.o 
 + 
 +<  mailbox_mach-objs := mailbox.o 
 + 
 +< -obj-$(CONFIG_OMAP_IOMMU) := iommu2.o omap-iommu.o 
 + 
 +< +obj-$(CONFIG_OMAP_IOMMU) += iommu2.o omap-iommu.o 
 + 
 +<  i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o 
 + 
 +<  obj-y += $(i2c-omap-m) $(i2c-omap-y) 
 + 
 +-> Get the kernel configuration 
 +  $ wget http://cumulus.gumstix.org/sources/mt9v032-2.6.34.defconfig 
 +  $ cp mt9v032-2.6.34.defconfig .config 
 +-> Rebuild 
 +  $ bitbake omap3-console-image 
 +-> Add the cross compiler to your path and configure the kernel 
 + 
 +=> It depends on the number of bits of the kernel ; if you don't know, use "uname -a" command 
 + 
 +32-bit processors => C'est notre cas 
 +  $ export PATH=/home/<username>/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin:${PATH}  
 +64-bit processors 
 +  $ export PATH=/home/<username>/overo-oe/tmp/sysroots/x86_64-linux/usr/armv7a/bin:${PATH} 
 +-> Build the kernel and the modules 
 +  $ make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage 
 +  $ make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- modules 
 +-> Install the modules 
 +  $ mkdir ~/linux-omap-2.6/modules 
 +  $ make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- INSTALL_MOD_PATH=./modules modules_install 
 + 
 +=> There is no big modifications to do (it may be different in any case) 
 + 
 +------------------------------------------ 
 +=====A-Z Know the version of the kernel===== 
 +------------------------------------------ 
 + 
 +  ~$ uname -a 
 +//Linux funjet 2.6.31-21-generic #59-Ubuntu SMP Wed Mar 24 07:28:56 UTC 2010 i686 GNU/Linux// 
 + 
 +----------------------------------------------------- 
 +=====A-Z Use the module camera CMOS APTINA mt9v032===== 
 +----------------------------------------------------- 
 + 
 +====ffmpeg==== 
 + 
 +=> If you want ot take a video, use ffmpeg : 
 + 
 +-f format 
 + 
 +-i filename input (ex : /dev/video0) 
 + 
 +-t time (seconds) 
 + 
 +-fs taille max (bytes) 
 + 
 +-b taux (bit/s) 
 + 
 +-vframes "number" (number of frames) 
 + 
 +-r fps (frames per second) 
 + 
 +-s size (ex : 800x600) 
 + 
 +-pix_fmt format 
 + 
 +-y overwrite if existing 
 + 
 +at the end, name of the output file (ex : file.avi) 
 + 
 +=> Examples : 
 + 
 +-> Take a video without restrictions (bad quality) : 
 + 
 +  ffmpeg -f video4linux2 -i /dev/video0 fileout.avi 
 +-> Take a video : secondes / 60 fps / 752x480 / name = fileout / overwrite if file exists 
 + 
 + 
 +  ffmpeg -f video4linux2 -s 752x480 -r 60 -t 5 -i /dev/video0 -y fileout.mpeg 
 + 
 +===Creation of the ipk with openembedded=== 
 + 
 +  bitbake -b libgsm_1.0.13.bb 
 +  bitbake -b ffmpeg_0.5.bb  
 +  bitbake -b lame_3.98.2.bb 
 +  bitbake -b ffmpeg_0.5.bb  
 + 
 +  scp ./armv7a/libgsm-dbg_1.0.13-r2.0.6_armv7a.ipk root@10.31.6.14:~/tmp  
 +  scp ./armv7a/libgsm-static_1.0.13-r2.0.6_armv7a.ipk root@10.31.6.14:~/tmp   
 +  scp ./armv7a/libgsm-dev_1.0.13-r2.0.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/libgsm1_1.0.13-r2.0.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/ffmpeg-dev_0.5-r17.2.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/gst-plugin-ffmpegcolorspace-dev_0.10.32-r11.1.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/ffmpeg-vhook-dbg_0.5-r17.2.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/ffmpeg-doc_0.5-r17.2.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/ffmpeg-static_0.5-r17.2.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/ffmpeg_0.5-r17.2.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/ffmpeg-x264-presets_0.5-r17.2.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/gst-plugin-ffmpegcolorspace_0.10.32-r11.1.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/ffmpeg-vhook_0.5-r17.2.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/ffmpeg-dbg_0.5-r17.2.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/lame-dbg_3.98.2-r0.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/lame-dev_3.98.2-r0.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/libmp3lame0_3.98.2-r0.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/lame-doc_3.98.2-r0.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/lame_3.98.2-r0.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/libmp3lame-dev_3.98.2-r0.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  scp ./armv7a/lame-static_3.98.2-r0.6_armv7a.ipk root@10.31.6.14:~/tmp 
 +  
 +  
 + 
 +puis dans tmp sur gumstix:  
 +  opkg install *.ipk   
 +   
 +----------------------------------------------- 
 +=====A-Z Configure the wifi in 2.6.34 kernel===== 
 +----------------------------------------------- 
 + 
 +-> Create confres file 
 + 
 +  #/bin/sh 
 +  insmod /lib/modules/2.6.36+/kernel/net/wireless/lib80211.ko  
 +  insmod /lib/modules/2.6.36+/kernel/drivers/net/wireless/libertas/libertas.ko 
 +  insmod /lib/modules/2.6.36+/kernel/drivers/net/wireless/libertas/libertas_sdio.ko 
 +  ifconfig wlan1 up 
 +  sleep 2 
 +  iwconfig wlan1 essid drones 
 +  sleep 2 
 +  dhclient wlan1 
 + 
 +-> Go to /media/rootfs/etc/init.d and past the confres file 
 + 
 +  root@overo:/media/rootfs/etc/rc5.d# ls -l 
 +  total 4 
 +  lrwxrwxrwx 1 root root  16 Jan  1  2000 S02dbus-1 -> ../init.d/dbus-1 
 +  lrwxrwxrwx 1 root root  14 Jan  1  2000 S09sshd -> ../init.d/sshd 
 +  lrwxrwxrwx 1 root root  14 Apr 12 12:59 S20apmd -> ../init.d/apmd 
 +  lrwxrwxrwx 1 root root  14 Apr 12 12:59 S20ntpd -> ../init.d/ntpd 
 +  lrwxrwxrwx 1 root root  16 Apr 12 12:59 S20syslog -> ../init.d/syslog 
 +  lrwxrwxrwx 1 root root  22 Jan  1  2000 S21avahi-daemon -> ../init.d/avahi-daemon 
 +  lrwxrwxrwx 1 root root  19 Apr 12 12:59 S23bluetooth -> ../init.d/bluetooth 
 +  lrwxrwxrwx 1 root root  20 Apr 12 12:59 S50usb-gadget -> ../init.d/usb-gadget 
 +  lrwxrwxrwx 1 root root  19 Apr 12 12:59 S99rmnologin -> ../init.d/rmnologin 
 + 
 +-> Create a link for confres 
 + 
 +  [/media/rootfs/etc/rc5.d]% sudo ln -s ../init.d/confres S99network 
 + 
 +=> This may appear : 
 + 
 +  root@overo:/media/rootfs/etc/rc5.d# ls -l 
 +  lrwxrwxrwx 1 root root 19 Apr 12 17:36 S99network -> /etc/init.d/confres 
 +  ... 
 + 
 +=> Then when we reboot the overo, the wifi is automatically up 
 + 
 +--------------------------------- 
 +=====A-Z Modify mt9v032 driver===== 
 +--------------------------------- 
 + 
 +====Context==== 
 + 
 +We consider that you have a camera caspa px (module camera CMOS APTINA mt9v032) 
 + 
 +====Create setenvcross==== 
 + 
 +Create a file : setenvcross 
 + 
 +  #!/bin/sh 
 +  export ARCH=arm 
 +  export CROSS_COMPILE=/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi- 
 +  export PATH=$PATH:/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/ 
 +  echo $CROSS_COMPILE 
 + 
 +====Create the Makefile==== 
 + 
 +Create a file : Makefile 
 + 
 +  KDIR=/home/thomas/linux-omap-2.6-thomas 
 +  PWD=/$(KDIR)/drivers/media/video 
 +  obj-m := mt9v032.o 
 +  all: 
 + $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules 
 +  install: 
 + $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules_install 
 +  clean: 
 + rm -f *~ 
 + $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean 
 +  copy: 
 + scp  /home/thomas/overo-oe/tmp/work/overo-angstrom-linux-gnueabi/linux-omap3-caspapx-2.6.36-r100/git/drivers/media/video/mt9v032.ko root@192.168.1.2:
 +  charge: 
 + ssh  root@192.168.1.2 "cd ~ && insmod mt9v032.ko && dmesg | tail -n 10" 
 +  decharge: 
 + ssh  root@192.168.1.2 "cd ~ && rmmod mt9v032.ko && dmesg | tail -n 10" 
 + 
 +====Modify a file==== 
 + 
 +... 
 + 
 +====Cross Compilation==== 
 + 
 +  [~/exo/makemodule]% source ./setenvcross 
 +  [~/exo/makemodule]% make 
 +  [~/exo/makemodule]% make copy 
 + 
 +----------- 
 +=====ISP : Image Signal Processor==== 
 +----------- 
 + 
 +====Context==== 
 + 
 +This part discusses about the Image Signal Processor chipped inside the OMAP35x. 
 + 
 +It isn't a complete tutorial, it is an overview of the ISP. 
 + 
 +====Introduction==== 
 + 
 +The camera ISP is a key component for imaging and video applications. 
 + 
 +The camera ISP provides the system interface and the processing capability to connect RAW image-sensor modules to the device. 
 + 
 +It provides you to : 
 + 
 +- do conversions (RGB -YUV, RGB -> RGB ...) 
 + 
 +- do rezising 
 + 
 +- do histograms (for estimations & perform auto-focus, auto-...) 
 + 
 +- ... 
 + 
 +See figures : 
 + 
 +=> Camera ISP (general) 
 + 
 +- Figure 12-53. Camera ISP Block Diagram (p°1371) 
 + 
 +- Figure 12-54. Camera ISP/Data Path/RAW RGB Images (p°1373) 
 + 
 +- Figure 12-55. Camera ISP/Data Path/YUV4:2:2 Images (p°1374) 
 + 
 +- Figure 12-56. Camera ISP/Data Path/JPEG Images (p°1374) 
 + 
 +=> CCDC 
 + 
 +- Figure 12-72. CCDC Block Diagram (p°1394) 
 + 
 +=> Preview 
 + 
 +- Figure 12-78. Preview Engine Block Diagram (p°1408) 
 + 
 +=> Resizer 
 + 
 +- Figure 12-80. Resizer Process(p°1415) 
 + 
 +====Image sensor==== 
 + 
 +ISP can support interface with various image sensors (RGB, Ye Cy Mg G). 
 + 
 +====CSI1 : Camera Serial Interface==== 
 + 
 +It is compatible with the MIPI CSI1 specifications (MIPI : Mobile Industry Processor Interface). 
 + 
 +This module can : 
 + 
 +- transfer pixels and data to system memory os to the video pipeline (way of the data, continue to pass into modules) 
 + 
 +- support RGB, RAW, YUV, JPEG formats 
 + 
 +- read from memory only in RAW format 
 + 
 +====CSI2 : Camera Serial Interface==== 
 + 
 +It is more efficient than the CSI1. 
 + 
 +It is compatible with the MIPI CSI1 specifications. 
 + 
 +This module can : 
 + 
 +- transfer pixels and data to system memory os to the video pipeline (way of the data, continue to pass into modules) 
 + 
 +- support RGB, RAW, YUV, JPEG formats 
 + 
 +- read from memory only in RAW format 
 + 
 +- converse RGB formats 
 + 
 +- ... 
 + 
 +====CPI : Camera Parallel Interface==== 
 + 
 +It supports two modes : 
 + 
 +- SYNC mode : the image-sensor provides horizontal & vertical synchronization signals to the CPI, along with the pixel clock 
 + 
 +- ITU mode  : the image-sensor provides an ITU-R BT 656-compatible data stream, horizontal & vertical synchronization signals are not provided to the interface 
 + 
 +====VP : Video Processing==== 
 + 
 +It is video processing HARDWARE ! 
 + 
 +The hardware pipeline contains two parts : front en & back end. 
 + 
 +=VPFE : Video processing front end = CCDC module 
 + 
 +- Performs signal-processing operations on RAW image input data 
 + 
 +- The output data can go directly to memory for software processing, or to the video-processing back end for further processing 
 + 
 +- Signal processing operations : Optical clamping, Black-level compensation, Data formatter, Output formatter ... 
 + 
 +=> VPBE : Video processing back end = Preview / Resizer modules 
 + 
 +- Performs signal-processing operations on RAW image input data and outputs YCbCr 4:2:2 data 
 + 
 +- Preview module : A-law decompression (cv non-linear 8-bit data to 10-bit linear data), Noise reduction, Digital gain, White balance, RGB to YCbCr conversion, can work from memory to memory ... 
 + 
 +- Resizer module : Performs on-the-fly upsampling (up to x4) and downsampling (down to x0.25) of YCbCr 4:2:2 data, can work from memory to memory ... 
 + 
 +====SCM : Statistic collection modules==== 
 + 
 +The host CPU uses statistics to adjust various parameters for processing image data. 
 + 
 +=> 3A metrics module : collects on-the-fly raw image data metrics to perform white balance, auto focus ... 
 + 
 +=> Histogram : performs on-the-fly pixel binning of raw image, based on color value ranges and regions, can work from memory to memory ... 
 + 
 +====SBL : Central-ressource Shared Buffer Logic==== 
 + 
 +Buffers and schedules memory accesses requested by camera ISP modules 
 + 
 +====Circular buffers (x2)==== 
 + 
 +They prevent storage of full image frames in memory when data must be pre/post-processed by software 
 + 
 +====MMU : Memory Managment Unit==== 
 + 
 +Manages virtual-to-physical address translation for external addresses and solves the memory-fragmentation issue 
 + 
 +====More informations==== 
 + 
 +=> Don't worry about the MicroSD, when module writes in memory, it is RAM 
 + 
 +=> CCDC module 
 + 
 +- The CCDC output is programmable with registers : ISP_CCDC_SYN_MODE (p°1554) 
 + 
 +  ISP_CCDC_SYN_MODE_SDR2RSZ : (0 disable / 1 enable) out = resizer module 
 +  ISP_CCDC_SYN_MODE_VP2SDR  : (0 disable / 1 enable) out = output formatter 
 +  ISP_CCDC_SYN_MODE_WEN     : (0 disable / 1 enable) out = memory 
 +  ISP_CCDC_SYN_MODE_PACK8   : (0 16b/pxl / 1 8b/pxl) data packing configuration when the data is written to memory 
 +   
 +=> Preview module 
 + 
 +- The input / output is programmable with registers : PRV_PCR (p°1607) 
 + 
 +  ISP_PRV_PCR_SDRPORT : (0 disable / 1 enable) PREVIEW module memory output port enable 
 +  ISP_PRV_PCR_RSZPORT : (0 disable / 1 enable) RESIZER module output port enable 
 +  ISP_PRV_PCR_YCPOS   : (0 YCRYCB / 1 YCBYCR / 2 CBYCRY / 3 CRYCBY) 
 +  ISP_PRV_PCR_SOURCE  : (0 Video port from the CCDC / 1 Memory) 
 + 
 +Be carefull : see (p°1477) Table 12-57. Preview Engine Conditional Configuration Parameters (Table des dépendances des registres) 
 + 
 +=> Writing in memory isn't programmable : the device is autonomous, it is a hardware system, it chooses the adresses where the writing will be ... 
 + 
 +=> The ISP simulate alone the input format (the user don't communicate it with parameters) : ISP = autonomous 
 + 
 +=> We can change the RGB to YUV conversion and colors with the matrix values : isppreview.c ligne 91 : 
 + 
 +  /* CSC Coef Matrix */ 
 +  {66, 129, 25}, 
 +  {-38, -75, 112}, 
 +  {112, -94 , -18} 
 +  /* CSC Offset */ 
 +  {0x0, 0x0, 0x0} 
 + 
 +Be carefull : 
 + 
 +- Gains are in S10Q8 format (10 signed bits / 8 = fractionnal part ; for example : 2.3 = 1000000011) 
 + 
 +- Offsets are in S8Q0 format for chroma and U10Q0 for luma 
 + 
 +  Y      CSCRY   CSCGY   CSCBY      Rin     YOFST 
 +  Cb  =  CSCRCB  CSCGCB  CSCBCB  *  Gin  +  OFSTCB 
 +  Cr     CSCRCR  CSCGCR  CSCBCR     Bin     OFSTCR 
 + 
 +If you want to have a blanck&white image : 
 + 
 +  /* CSC Coef Matrix BW */ 
 +  {66, 129, 25}, 
 +  {0, 0, 0}, 
 +  {0, 0, 0} 
 +  /* CSC Offset */ 
 +  {0x0, 0x0, 0x0} 
 + 
 +If you want to have a red filtered image : 
 + 
 +  /* CSC Coef Red */ 
 +  {66, 0, 0}, 
 +  {-38, 0, 0}, 
 +  {112, 0, 0} 
 +  /* CSC Offset */ 
 +  {0x0, 0x0, 0x0} 
 + 
 +If you want to have a red constant image : 
 + 
 +  /* CSC Coef Red */ 
 +  {0, 0, 0}, 
 +  {0, 0, 0}, 
 +  {0, 0, 0} 
 +  /* CSC Offset */ 
 +  {0x0, 0x0, 0x0ff} 
 + 
 +=> VERY IMPORTANT : The ISP files are compiled and sit in the linux kernel (uImage) !!! NOT WITH MODULES 
 + 
 +------------------------------ 
 +=====A-Z Modify ISP drivers===== 
 +------------------------------ 
 + 
 +====Context==== 
 + 
 +We consider that you have a camera caspa px (module camera CMOS APTINA mt9v032) 
 + 
 +====set environement for cross compilation==== 
 + 
 +-> Create a bash program used for compilling and sending the files to the overo by wifi 
 + 
 +  #!/bin/sh 
 +  export PATH=/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin:${PATH}  
 +  make ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi- uImage 
 +  export IPOVERO=10.31.6.14 
 +  scp /home/thomas/linux-omap-2.6.35+/arch/arm/boot/uImage root@$IPOVERO:/media/mmcblk0p1/ 
 +  ssh root@$IPOVERO "reboot" 
 +   
 + 
 +-> Or, more simply... 
 + 
 +set the environement: 
 +  export ARCH=arm 
 +  export CROSS_COMPILE=/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi- 
 +  export PATH=$PATH:/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/ 
 +  echo $CROSS_COMPILE 
 +then 
 +  cd linux-omap-2.6.35+  
 +  make module   
 +  export IPOVERO=10.31.6.14 
 +  scp /home/thomas/linux-omap-2.6.35+/arch/arm/boot/uImage root@$IPOVERO:/media/mmcblk0p1/ 
 +  ssh root@$IPOVERO "reboot" 
 +   
 + 
 +====Create recuptestffmpeg==== 
 + 
 +-Create a bash program used to get the file from the overo -> PC 
 + 
 +  scp root@192.168.1.2:~/fichier.avi ./ 
 + 
 +====Modify filen take a video and see it==== 
 + 
 +-Modify a file located in : 
 + 
 +  /home/thomas/linux-omap-2.6/drivers/media/video/isp 
 + 
 +-> For example : we modify the isppreview.c, ligne 91 : 
 + 
 +  /* CSC Coef Matrix */ 
 +  {66, 129, 25}, 
 +  {-38, -75, 112}, 
 +  {112, -94 , -18} 
 +   
 +  change it by 
 +   
 +  /* CSC Coef Matrix */ 
 +  {66, 0, 0}, 
 +  {-38, 0, 0}, 
 +  {112, 0, 0} 
 + 
 +-> Save the file 
 + 
 +-> Compile it and send it 
 + 
 +  [~/linux-omap-2.6]% ./compcpimage 
 + 
 +=> The overo reboot 
 + 
 +-> Take video (see A-Z Use the module camera CMOS APTINA mt9v032) 
 + 
 +-> Recover it 
 + 
 +  [~]% ./recuptestffmpeg  
 + 
 +=> You may have the video fichier.avi 
 + 
 +----------------------------------- 
 +=====DDD : Data Display Debugger===== 
 +----------------------------------- 
 + 
 +====Introduction==== 
 + 
 +DDD is a graphical user interface for debuggers such as GDB. 
 + 
 +This is a simple tutorial for understanding how to get and use DDD. 
 + 
 +====Get DDD==== 
 + 
 +- Open Ubuntu Software Center 
 + 
 +- Write ddd in the search toolbar 
 + 
 +=> It may appear 
 + 
 +- Download it 
 + 
 +====Use DDD==== 
 + 
 +- First, we have to create an executable file : 
 + 
 +- Create a new file : prog.c 
 + 
 +  #include <stdlib.h> 
 +  #include <stdio.h> 
 + 
 +  int main () 
 +  { 
 + int x = 17; 
 +  
 + printf ("Start "); 
 +  
 + if (x > 100) 
 + printf ("x > 100 "); 
 + else if (x < 100) 
 + printf ("x < 100 "); 
 +  
 + printf ("End"); 
 +  
 + return (0); 
 +  } 
 + 
 +- Compile it with these options : (g = data for debugging (lines of the program)) 
 + 
 +  gcc -g -o prog prog.c 
 + 
 +- Open the DDD : 
 + 
 +  ddd 
 + 
 +- File/Open Program : choose the prog (executable) 
 + 
 +=> The source code may appear 
 + 
 +- View/Command tool 
 + 
 +=> A window may appear (run / interrupt / step / next ...) 
 + 
 +- You can place a beakpoint by double clicking on a line 
 + 
 +- Then run the programm (click on run) 
 + 
 +- It will stop at the breakpoint 
 + 
 +- To erase it, click right, delete breakpoint 
 + 
 +- ... 
 + 
 +---------------------------- 
 +=====A-Z Save the MicroSD===== 
 +---------------------------- 
 + 
 +====Context==== 
 + 
 +In order to save all the MicroSD config : 
 + 
 +- Partition 1 : ROOT 
 + 
 +- Partition 2 : rootfs 
 + 
 +====Save an image==== 
 + 
 +if : inpute file / of = output file 
 + 
 +  sudo dd if=/dev/sdc1 of=imROOT 
 +  sudo dd if=/dev/sdc2 of=imrootfs 
 + 
 +====Paste an image==== 
 + 
 +  sudo dd if=imROOT of=/dev/sdc1 
 +  sudo dd if=imrootfs of=/dev/sdc2 
 + 
 +-------------------------------------------------------- 
 +=====Give an @IP to the Gumstix in function with @MAC===== 
 +-------------------------------------------------------- 
 + 
 +====Context==== 
 + 
 +We wanted to give a fixed @IP to the eth0/wlan0 ... in fuction with @MAC. 
 + 
 +We use a Netgear router. 
 + 
 +====Choose an @IP==== 
 + 
 +- Open Firefox 
 + 
 +- Open the Netgear Router Setup by writing on the toolbar the @IP (réseau) : 
 + 
 +  http://192.168.1.1/start.htm 
 + 
 +=> The interface may appear 
 + 
 +Go to LAN IP Setup 
 + 
 +- In the box named : Address Reservation, choose add : 
 + 
 +- Choose IP Address, Device Name and write the Mac Address 
 + 
 +=> The the IP may be fixed with the hardware 
 + 
 + 
 + 
 +===Get access to internet with the gumstix in the enac network=== 
 +  dhclient eth0 
 +  export http_proxy=http://squid:3128 
 + 
 +to do that automatically at startup, edit /etc/init.d/dhcl 
 +  sleep 3 
 +  dhclient eth0 
 +  export http_proxy=http://squid:3128 
 +and create a symlink in /etc/rc5.d/S99dhcl 
 + 
 + 
 + 
 +------------------------------------------------------------------------- 
 +=====A-Z Introduction - Gumstix Overo Linux Kernel Debugging with kgdb===== 
 +------------------------------------------------------------------------- 
 + 
 +====Context==== 
 + 
 +This tutorial shows how to debug the linux kernel of a Gumstix Overo. 
 + 
 +KGDB is a debugger for the Linux kernel. It requires two machines that are connected via a serial connection. 
 + 
 +It makes it possible to place breakpoints in kernel code, step through the code and observe variables. 
 + 
 +====Get gdb for arm==== 
 + 
 +A common error while using gdb,is using the wrong gdb. 
 + 
 +This step is very IMPORTANT : 
 + 
 +You may have GDB for ARM architectures !!! 
 + 
 +With openembedded : 
 + 
 +  bitbake gdb-cross gdbserver 
 + 
 +=> A recipe is created and you may find a binary file : 
 + 
 +arm-angstrom-linux-gnueabi-gdb located here /home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin 
 + 
 +=> You can run it by writing 
 + 
 +  ./arm-angstrom-linux-gnueabi-gdb 
 + 
 +BUT it is not easy to use, that why I recommend you to create a symbolical link : 
 + 
 +  sudo ln -s ~/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi-gdb gdbarm 
 + 
 +=> Now you can run the gdb for arm by writing in your ~/linux file : 
 + 
 +  ./gdbarm 
 + 
 +====Prepare and build the Linux Kernel with kgdb==== 
 + 
 +You must create a kernel with kgdb enabled and debug info. 
 + 
 +- Go in your home linux : 
 + 
 +  cd ~/linux-omap-2.6-thomas/ 
 + 
 +- Modify the configuration of the compilation 
 + 
 +VERY IMPORTANT : You must edit the configuration for ARM !!! 
 + 
 +  export ARCH=arm 
 +  export CROSS_COMPILE=/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi- 
 +  export PATH=$PATH:/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/ 
 +  echo $CROSS_COMPILE 
 + 
 +- If you want to use the camera Caspa px mt9v032, I recommend you to take this config for the first use 
 + 
 +  wget http://cumulus.gumstix.org/sources/mt9v032-2.6.34.defconfig 
 +  cp mt9v032-2.6.34.defconfig .config 
 +  make oldconfig 
 + 
 +- Then you can configure the file : 
 + 
 +  make xconfig 
 + 
 +You must see scripts/kconfig/qconf arch/arm/Kconfig else your don't configure well for arm ... 
 + 
 +=> An application may appear 
 + 
 +- At the tab Kernel Hacking, tick : 
 + 
 +  KGDB: kernel debugger 
 +  KGDB: use kgdb over the serial console 
 +  Compile the kernel with debug info 
 + 
 +If you don't find these lines, you can search them (edit/find) 
 + 
 +- Build the kernel 
 + 
 +  make uImage 
 + 
 +====Use kgdb on the target machine before / during the boot==== 
 + 
 +If you want to debug applications loaded in the boot, you have to stop the boot and run kgdb before the boot 
 + 
 +- Run the Overo and stop the autoboot by typing a touch of the keyboard 
 + 
 +- Display the environment variables 
 + 
 +  printenv 
 + 
 +=> You may see this : (trick - enlarge the window to see all the arguments ; minicom don't display all) 
 + 
 +mmcargs=setenv bootargs console=${console} vram=12M ... 
 + 
 +- Add these instructions :  
 + 
 +kgdboc=ttyS2,115200 : kgdb over console, port ttyS2, communication speed 1152000 Bauds 
 + 
 +kgdbwait : stop the kernel (no boot) 
 + 
 +  setenv mmcargs setenv bootargs console=${console} vram=12M omapfb.vram=0:4M omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait init=/init kgdboc=ttyS2,115200 kgdbwait 
 +  saveenv 
 +  reset 
 + 
 +=> Now, the boot may stop and you may see this : 
 + 
 +Entering kdb (current=0xcec1d9c0, pid 1) due to Keyboard Entry 
 + 
 +kdb> 
 + 
 +KDB is running, here you can place breakpoints (bp name_function) or continue (go) ; see others (help) ... 
 + 
 +BUT this use is limited, and I am going to show you how to debug with KGDB/GDB with 2 machines 
 + 
 +- Run kgdb : 
 + 
 +  kdb> kgdb 
 + 
 +=> You may see : 
 + 
 +Entering please attach debugger or use $D#44+ or $3#33 
 + 
 +=> KGDB is running on the target machine ! 
 + 
 +====Use gdb on the development machine==== 
 + 
 +- Open a new terminal and run GDB for ARM : 
 + 
 +  ./gdbarm ./vmlinux 
 + 
 +=> GDB is running on the development machine (gdb) 
 + 
 +- Configure the communication speed / the port ... 
 + 
 +  set remotebaud 115200 
 +  set debug remote 1 
 +  target remote /dev/ttyUSB3 
 + 
 +=> The two machines are dialoging (... ACK ... Packet received:
 + 
 +=> Then you can debug all what you want : 
 + 
 +EXAMPLE : 
 + 
 +- Place a breakpoint, continue the program, ..., quit 
 + 
 +  break name_function 
 +  continue 
 +  ... 
 +  q 
 + 
 +====Use kgdb after the boot==== 
 + 
 +- On the overo, configure the port, stop the execution, run kgdb 
 + 
 +  echo ttyS2 > /sys/module/kgdboc/parameters/kgdboc 
 +  echo g > /proc/sysrq-trigger 
 + 
 +- On the development machine, run gdb 
 + 
 +  ./gdbarm ./vmlinux 
 +  set remotebaud 115200 
 +  set debug remote 1 
 +  target remote /dev/ttyUSB3 
 + 
 +------------------------------------- 
 +=====A-Z ISP Debugging using kgdb===== 
 +------------------------------------- 
 + 
 +====Context==== 
 + 
 +ISP = Image Signal Processsor. 
 + 
 +This tutorial shows how to debug the ISP in the Gumstix Overo Linux Kernel. 
 + 
 +====Run the kernel debugger==== 
 + 
 +See    A-Z Introduction - Linux Kernel Debugging using kgdb 
 + 
 +====Start debugging==== 
 + 
 +You need to have 2 terminals : 
 + 
 +ONE = target machine, kgdb is running ... 
 + 
 +TWO = development machine, (gdb) is waiting 
 + 
 +- Place a breakpoint where you want to analyse the execution : 
 + 
 +  break ispccdc_config_datapath 
 + 
 +=> Breakpoint 1 at 0xc02f03f8: file drivers/media/video/isp/ispccdc.c, line 576. 
 + 
 +=> The debugger has found the function 
 + 
 +- Run the program in order to go at the breakpoint 
 + 
 +  continue 
 + 
 +=> Now the two terminals are busy 
 + 
 +- Open a new terminal and do a connexion by ssh with the overo : 
 + 
 +  ssh root@192.168.1.8 
 + 
 +- Then insert the driver of the camera 
 + 
 +  insmod mt9v032.ko 
 + 
 +=> The program stop at the breakpoint 1 ispccdc.c - line 576. 
 + 
 +Breakpoint 1, ispccdc_config_datapath ... 
 + 
 +576 syn_mode = isp_reg_readl(isp_ccdc->dev, OMAP3_ISP_IOMEM_CCDC, 
 + 
 +(gdb) 
 + 
 +- In order to step : 
 + 
 +  next 
 + 
 +=> Now you can move on the kernel and see what is doing by the os 
 + 
 +====Debug with DDD==== 
 + 
 +DDD = Data Display Debugger is a common graphical user interface to GDB. 
 + 
 +See DDD : Data Display Debugger 
 + 
 +- Run ddd 
 + 
 +  ddd --debugger ./gdbarm vmlinux 
 +  set remotebaud 115200 
 +  set debug remote 1 
 +  target remote /dev/ttyUSB3 
 + 
 +=You can use DDD (see DDD : Data Display Debugger) 
 + 
 +-------------------------------- 
 +=====Add RAM on Gumstix Overo===== 
 +-------------------------------- 
 + 
 +====Context==== 
 + 
 +If the Overo is in lack of live memory (RAM), you can use ROM. 
 + 
 +We consider we want to use a USB key for adding memory. 
 + 
 +====Create the partition (SWAP)==== 
 + 
 +- Format the USB key (unique partition) 
 + 
 +(if you want to delete partitions, see : 
 + 
 +A-Z Create your own bootable MicroSD Card (8GB) Delete the partitions in SD Card) 
 + 
 +- Plug the USB key in the Gumstix Overo (USB port) 
 + 
 +Now we have to create a swap partition : it is memoryspace used when too much memory is used 
 + 
 +- Create a swap partition 
 + 
 +see : A-Z Create your own bootable MicroSD Card (8GB) / Partitioning the SD card 
 + 
 +- Change the partition type to 82  Linux swap / Solaris 
 + 
 +  Command (m for help): t 
 +  Selected partition 1 
 +  Hex code (type L to list codes): 82 
 + 
 +- Apply changes 
 + 
 +  w 
 + 
 +====Use the swap==== 
 + 
 +We have to inform the Gumstix there is a swap partition and activate it 
 + 
 +  mkswap /dev/sda1 
 +  swapon /dev/sda1 
 + 
 +------------------------------------------- 
 +=====Introduction - Profiling with gprof===== 
 +------------------------------------------- 
 + 
 +====Context==== 
 + 
 +Gprof is a profiling program which measures statistics of a program 
 + 
 +in order to optimize the source code. 
 + 
 +It evaluates execution time of each function, do various statistics ... 
 + 
 +====Tutorial : Use of gprof==== 
 + 
 +- Write a program : prog.c 
 + 
 +  #include <stdlib.h
 +  #include <stdio.h> 
 +   
 +  void wait (void) 
 +  { 
 + unsigned int y; 
 + for (y = 0 ; y < 50000 ; y++); 
 +  } 
 +   
 +  int main () 
 +  { 
 + unsigned int x; 
 + for (x = 0 ; x < 10000 ; x++) 
 + wait (); 
 + return (0); 
 +  } 
 + 
 +- Compile it with these parameters (prog = executable) 
 + 
 +  gcc -pg -o prog prog.c 
 + 
 +- Run the program 
 + 
 +  ./prog 
 + 
 +=> A file appears : gmon.out 
 + 
 +- Write the profiler data in results.txt 
 + 
 +  gprof prog gmon.out > results.txt 
 + 
 +- Read the profiling results 
 + 
 +  gedit results.txt 
 + 
 +=> The profiling data may appear ! 
 + 
 +(time, cumulative, seconds, call, numbers, statistics ...) 
 + 
 +-------------------------------------------------------------- 
 +=====A-Z Profiling program / Source Code Optimization (SCO)===== 
 +-------------------------------------------------------------- 
 + 
 +====Context==== 
 + 
 +We want to have an efficient capture program (fast, easy to execute ...) 
 + 
 +in order to relieve the processor of the target. 
 + 
 +We consider the files : 
 + 
 +input  : YUV picture 
 + 
 +output : RGB picture 
 + 
 +prog.c : program (here YUV to RGB conversion) 
 + 
 +But this tutorial may be applied for different uses (general uses) 
 + 
 +====Folder requirements==== 
 + 
 +In order to well execute the operations, it will be necessary to create 2 folders : 
 + 
 +- Folder /home/root/SCO/   (TARGET) 
 + 
 +- Folder /home/thomas/SCO/ (DEVELOPMENT) 
 + 
 +====Create the Makefile and the script==== 
 + 
 +- On the DEVELOPMENT machine : 
 + 
 +  cd /home/thomas/SCO/ 
 + 
 +- In new text file named Makefile, write : 
 + 
 +  # MAKEFILE - SOURCE CODE OPTIMIZATION (SCO) - (DEVELOPMENT) 
 +  # 
 +  # Cross-compiles prog.c / Executes prog / Displays profiling data 
 +  # Needs 2 machines (DEVELOPMENT X86 / TARGET ARM) 
 +  # 
 +  # This Makefile can : 
 +  # cross-compile prog.c with profiling data   (DEVELOPMENT) 
 +  # send prog & input & send-results to target (DEVELOPMENT -> TARGET) 
 +  # execute ./prog on input file               (TARGET / DEVELOPMENT) 
 +  # display output (if picture)                (DEVELOPMENT) 
 +  # display the profiling results              (DEVELOPMENT) 
 +  # 
 +  # Requirements : 
 +  # Folder /home/root/SCO/   (TARGET) 
 +  # Folder /home/thomas/SCO/ (DEVELOPMENT) 
 +  # 
 +  # t.daveloose@laposte.net 
 +   
 +  # @IP Host machine 
 +  IPDEV 10.31.6.12 
 +  # @IP Target machine (Gumstix Overo) 
 +  IPOVERO = 10.31.6.14 
 +    
 +  # Cross-compiler path 
 +  ARM-GCC_arm = /opt/paparazzi/omap/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi-gcc 
 +  ARM-GCC_x86 = /usr/bin/gcc-4.5 
 +   
 +  # "make"                     => compiles + executes 
 +  all: allarm 
 +   
 +  allarm: compile_arm send execute_arm 
 +   
 +  allx86: compile_x86 executex86 
 +   
 +  # "make compile_arm"         => cross-compiles prog.c with profiling data + sends them to target 
 +  compile_arm: 
 +  @echo "COMPILATION FOR ARM" 
 +  $(ARM-GCC_arm) -pg -O3 -o prog prog.c fixpawd.c fixpawd_math.c 
 +   
 +  # "make compile_X86"         => cross-compiles prog.c with profiling data + sends them to target 
 +  compile_x86: 
 +  @echo "COMPILATION FOR X86" 
 +  $(ARM-GCC_x86) -pg -O3 -o prog prog.c fixpawd.c fixpawd_math.c 
 +   
 +  # "make send"                => sends prog + input + send-results (target program) to target 
 +  send: 
 +  @echo "SEND" 
 +  cd /home/thomas/SCO/ 
 +  scp prog root@$(IPOVERO):/home/root/SCO/ 
 +  scp input root@$(IPOVERO):/home/root/SCO/ 
 +  scp send-results root@$(IPOVERO):/home/root/SCO/ 
 +  ssh root@$(IPOVERO) "cd /home/root/SCO/ && chmod a+x send-results" 
 +   
 +  # "make execute_arm"         => executes prog in the target 
 +  execute_arm: 
 +  @echo "EXECUTION FOR ARM" 
 +  ssh root@$(IPOVERO) "cd /home/root/SCO/ && ./prog 752 480 input output outputrgb 10" 
 +   
 +  # "make execute_x86"         => executes prog in the development machine 
 +  execute_x86: 
 +  @echo "EXECUTION FOR X86" 
 +  ./prog 752 480 input output outputrgb 10 
 +   
 +  # "make display-picture"     => display outputrgb if picture 
 +  display-picture: 
 +  @echo "DISPLAY PICTURE" 
 +  display -size 752x480 -depth 8 rgb:outputrgb  rgb:input   
 +   
 +  # "make display-prof"        => display profiling data 
 +  display-prof: 
 +  @echo "DISPLAY PROFILING DATA" 
 +  gprof prog gmon.out > results.txt 
 +  gedit results.txt 
 +   
 +  # "make clean"               => delete all the products 
 +  clean: 
 +  @echo "CLEAN" 
 +  rm prog 
 +  rm gmon.out 
 +  rm output 
 +  rm outputrgb 
 +  rm results.txt 
 +  ssh root@$(IPOVERO) "cd /home/root/SCO/ && rm prog gmon.out input output send-results" 
 +   
 +  # "make help"             =display the help menu 
 +  help: 
 +  @echo "MAKEFILE SOURCE CODE OPTIMIZATION (DEVELOPMENT) HELP" 
 +  @echo "Folder requirements : " 
 +  @echo "/home/root/SCO/ on target machine" 
 +  @echo "/home/thomas/SCO/ on development machine" 
 +  @echo "Commands : " 
 +  @echo "make                 - compiles + executes" 
 +  @echo "make compile_arm     - cross-compiles prog.c with profiling data + sends them to target" 
 +  @echo "make compile_X86     - cross-compiles prog.c with profiling data + sends them to target" 
 +  @echo "make send            - sends prog + input + send-results (target program) to target" 
 +  @echo "make execute_arm     - executes prog in the target" 
 +  @echo "make execute_x86     - executes prog in the development machine" 
 +  @echo "make display-picture - display output if picture" 
 +  @echo "make display-prof    - display profiling data" 
 +  @echo "make clean           - delete all the products" 
 + 
 +- In new text file named send-results, write : 
 + 
 +  # SCRIPT - SOURCE CODE OPTIMIZATION (SCO) - (TARGET) 
 +  # 
 +  # Sends output + gmon.out to development machine 
 +  # Needs 2 machines (DEVELOPMENT X86 / TARGET ARM) 
 +  # 
 +  # This script can : 
 +  # send output & gmon.out files (TARGET -DEVELOPMENT) 
 +  # 
 +  # Requirements : 
 +  # Folder /home/root/SCO/   (TARGET) 
 +  # Folder /home/thomas/SCO/ (DEVELOPMENT) 
 +  # 
 +  # t.daveloose@laposte.net 
 +   
 +  cd /home/root/SCO/ 
 +  scp output gmon.out thomas@10.31.6.12:/home/thomas/SCO/ 
 + 
 +====Use the Makefile==== 
 + 
 +- Modify prog.c 
 + 
 +- Apply the Makefile (development) 
 + 
 +  make 
 + 
 +- Apply the script (target) 
 + 
 +  ./send-results 
 + 
 +- Apply the Makefile (development) 
 + 
 +  make display-prof 
 + 
 +... 
 + 
 +For more informations about the Makefile functions, type : 
 + 
 +  make help 
 + 
 + 
 +---------------------------------------- 
 +=====Improve the quality of the image===== 
 +---------------------------------------- 
 + 
 +====Context==== 
 + 
 +We consider that you have Gumstix Overo with mt9v034 sensor 
 + 
 +====Modify the parameters==== 
 + 
 +- Boot the Gumstix and go here : 
 + 
 +  cd /sys/module/mt9v032/parameters 
 + 
 +=> You may see the parameters 
 + 
 +- Write a script called parameters : 
 + 
 +  chmod a+w /sys/module/mt9v032/parameters/
 +  echo 0 > /sys/module/mt9v032/parameters/hdr 
 +   
 +  echo 1 > /sys/module/mt9v032/parameters/hflip 
 +  echo 1 > /sys/module/mt9v032/parameters/vflip 
 +   
 +  cat /sys/module/mt9v032/parameters/hdr 
 +  cat /sys/module/mt9v032/parameters/hflip 
 +  cat /sys/module/mt9v032/parameters/vflip 
 + 
 +- Apply it on the Gumstix 
 + 
 +  ./parameters 
 + 
 +=> Now, the quality of the image should better 
 + 
 +------------------------- 
 +=====Add boot commands===== 
 +------------------------- 
 + 
 +====Context==== 
 + 
 +This tutorial shows how to make a boot.scr file. 
 + 
 +It is running before the boot. 
 + 
 +====Write a script==== 
 + 
 +- Edit a new file named myscript.cmd and write commands inside, for example 
 + 
 +  setenv mmcargs write-what-you-want 
 + 
 +====boot.scr building==== 
 + 
 +- Build the boot.scr file 
 + 
 +  mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "myscript" -d myscript.cmd boot.scr 
 + 
 +=> It may appear a message like that : 
 + 
 +  Image Name:   myscript 
 +  Created:      Fri May 13 14:58:18 2011 
 +  Image Type:   ARM Linux Script (uncompressed) 
 +  Data Size:    57 Bytes = 0.06 kB = 0.00 MB 
 +  Load Address: 00000000 
 +  Entry Point:  00000000 
 +  Contents: 
 +   Image 0: 49 Bytes = 0.05 kB = 0.00 MB 
 + 
 +- Check that boot.scr exists and place it in the first partition ROOT 
 + 
 +=> Now, before the boot, the commands in the boot.scr will be done 
 + 
 +---------------------------------------------------- 
 +=====Add a module or an application / Opkg - Ipkg===== 
 +---------------------------------------------------- 
 + 
 +====Context==== 
 + 
 +If you want to add modules in you Overo. 
 + 
 +====Check your modules==== 
 + 
 +If you want to check how many modules you have : 
 + 
 +  $ opkg list | wc -l 
 +  17698 
 +  $ echo 'src/gz angstrom-base http://www.angstrom-distribution.org/feeds/unstable/ipk/glibc/armv7a/base'  > /etc/opkg/angstrom-base.conf 
 +  $ opkg update 
 +  ... 
 +  $ opkg list | wc -l 
 +  21755 
 + 
 +Now you can update your opkg repository 
 + 
 +  $ opkg update 
 +  Downloading http://www.gumstix.net/feeds/unstable/ipk/glibc/armv7a/base/Packages.gz. 
 +  Inflating http://www.gumstix.net/feeds/unstable/ipk/glibc/armv7a/base/Packages.gz. 
 +  Updated list of available packages in /var/lib/opkg/base. 
 +  ... 
 +  $ opkg list_installed | grep gcc 
 +  libgcc1 - 4.3.3-r17.1.6 
 +  $ opkg install task-native-sdk 
 +  ... 
 + 
 +====Find a module==== 
 + 
 +A giant repository is here : 
 + 
 +http://www.angstrom-distribution.org/repo/ 
 + 
 +- Download a module and place it in the 2nd partition rootfs 
 + 
 +====Install a module==== 
 + 
 +- In order to install the module, write : 
 + 
 +  ipkg module.ipk 
 + 
 +-------------------------------------- 
 +=====Introduction media-ctl & yavta===== 
 +-------------------------------------- 
 + 
 +====Context==== 
 + 
 +It is not a tutorial, I never have try it ! (Summary of found informations) 
 + 
 +media-ctl = program for configuring ISP 
 + 
 +yavta     = program for using camera 
 + 
 +====Download the working environment==== 
 + 
 +  git clone git://linuxtv.org/pinchartl/media.git 
 +  git branch -a 
 +  git checkout -b omap3isp-next-omap3isp remotes/origin/omap3isp-next-omap3isp export ARCH=arm 
 +export CROSS_COMPILE=/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi- export PATH=$PATH:/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/ 
 +echo $CROSS_COMPILE 
 + 
 +====Apply the patch==== 
 + 
 +  From ed2bf9e424ce0a1fad62bb6cb86c436c11e356e6 Mon Sep 17 00:00:00 2001 
 +  From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 
 +  Date: Fri, 8 Apr 2011 14:05:07 +0200 
 +  Subject: [PATCH] board-overo: Add Caspa camera support 
 +   
 +  Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 
 +  --- 
 +   arch/arm/mach-omap2/board-overo.c |   62 +++++++++++++++++++++++++++++++++++++ 
 +   1 files changed, 62 insertions(+), 0 deletions(-) 
 +   
 +  diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c 
 +  index cb26e5d..4443b4a 100644 
 +  --- a/arch/arm/mach-omap2/board-overo.c 
 +  +++ b/arch/arm/mach-omap2/board-overo.c 
 +  @@ -65,6 +65,67 @@ 
 +   #define OVERO_SMSC911X2_CS     4 
 +   #define OVERO_SMSC911X2_GPIO   65 
 +    
 +  +#if defined(CONFIG_VIDEO_OMAP3) || defined(CONFIG_VIDEO_OMAP3_MODULE) 
 +  + 
 +  +#include <media/mt9v032.h> 
 +  +#include "../../../drivers/media/video/omap3isp/isp.h" 
 +  +#include "../../../drivers/media/video/omap3isp/ispreg.h" 
 +  +#include "devices.h" 
 +  + 
 +  +#define MT9V032_I2C_ADDR                0x5c 
 +  +#define MT9V032_I2C_BUS_NUM                3 
 +  + 
 +  +static void mt9v032_set_clock(struct v4l2_subdev *subdev, unsigned int rate) 
 +  +{ 
 +  +        struct isp_device *isp = v4l2_dev_to_isp_device(subdev->v4l2_dev); 
 +  + 
 +  +        isp->platform_cb.set_xclk(isp, rate, ISP_XCLK_A); 
 +  +} 
 +  + 
 +  +static struct mt9v032_platform_data caspa_mt9v032_platform_data = { 
 +  +        .clk_pol = 0, 
 +  +        .set_clock = mt9v032_set_clock, 
 +  +}; 
 +  + 
 +  +static struct i2c_board_info caspa_camera_i2c_device = { 
 +  +        I2C_BOARD_INFO("mt9v032", MT9V032_I2C_ADDR), 
 +  +        .platform_data = &caspa_mt9v032_platform_data, 
 +  +}; 
 +  + 
 +  +static struct isp_subdev_i2c_board_info caspa_camera_subdevs[] = { 
 +  +        { 
 +  +                .board_info = &caspa_camera_i2c_device, 
 +  +                .i2c_adapter_id = MT9V032_I2C_BUS_NUM, 
 +  +        }, 
 +  +        { NULL, 0 }, 
 +  +}; 
 +  + 
 +  +static struct isp_v4l2_subdevs_group caspa_camera_subdev_groups[] = { 
 +  +        { 
 +  +                .subdevs = caspa_camera_subdevs, 
 +  +                .interface = ISP_INTERFACE_PARALLEL, 
 +  +                .bus = { .parallel = { 
 +  +                        .data_lane_shift        = 0, 
 +  +                        .clk_pol                = 0, 
 +  +                        .bridge                        = ISPCTRL_PAR_BRIDGE_DISABLE, 
 +  +                } }, 
 +  +        }, 
 +  +        { NULL, 0, }, 
 +  +}; 
 +  + 
 +  +static struct isp_platform_data caspa_isp_platform_data = { 
 +  +        .subdevs = caspa_camera_subdev_groups, 
 +  +}; 
 +  + 
 +  +static int __init caspa_camera_init(void) 
 +  +{ 
 +  +        return omap3_init_camera(&caspa_isp_platform_data); 
 +  +} 
 +  + 
 +  +#else 
 +  +static inline void caspa_camera_init(void) {} 
 +  +#endif 
 +  + 
 +   #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \ 
 +           defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) 
 +    
 +  @@ -457,6 +518,7 @@ static void __init overo_init(void) 
 +           usb_ehci_init(&ehci_pdata); 
 +           overo_ads7846_init(); 
 +           overo_init_smsc911x(); 
 +  +        caspa_camera_init(); 
 +    
 +           /* Ensure SDRC pins are mux'd for self-refresh */ 
 +           omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); 
 +  --  
 +  1.7.3.4 
 +   
 +  You will also need to disable the pull-up resistors on the PCLK, HS and VS 
 +  signals due to a hardware bug. 
 +   
 +  diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c 
 +  index 4443b4a..4797a80 100644 
 +  --- a/arch/arm/mach-omap2/board-overo.c 
 +  +++ b/arch/arm/mach-omap2/board-overo.c 
 +  @@ -497,6 +497,11 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { 
 +    
 +   #ifdef CONFIG_OMAP_MUX 
 +   static struct omap_board_mux board_mux[] __initdata = { 
 +  +        /* CAM */ 
 +  +        OMAP3_MUX(CAM_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), 
 +  +        OMAP3_MUX(CAM_HS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), 
 +  +        OMAP3_MUX(CAM_VS, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), 
 +  + 
 +           { .reg_offset = OMAP_MUX_TERMINATOR }, 
 +   }; 
 +   #endif 
 + 
 +====Download media-ctl==== 
 + 
 +  git clone git://git.ideasonboard.org/media-ctl.git 
 + 
 +- Open the file Install & do the operations 
 + 
 +  autoreconf --install 
 +  ./configure --with-kernel-headers=/home/thomas/media/ 
 +  make 
 +  sudo make install 
 + 
 +====Download yavta==== 
 + 
 +Here : 
 + 
 +  https://github.com/fastr/yavta/archives/master 
 + 
 +- Than compile it (for ARM !) 
 + 
 +====Build the kernel and the modules==== 
 + 
 +  make oldconfig 
 +  make uImage 
 +  make modules 
 + 
 +====Use the two programs==== 
 + 
 +- Print the topology of your interface 
 + 
 +  media-ctl -p 
 + 
 +- Configure a datapath and the formats : 
 + 
 +  media-ctl -r -l '"mt9034 3-0048":0->"OMAP3 ISP CCDC":0[1], "OMAP3 ISPCCDC":1->"OMAP3 ISP CCDC output":0[1]' 
 +  media-ctl -f '"mt9v034 3-0048":0[SGRBG10 752x480], "OMAP3 ISP CCDC":1[SGRBG10752x480] 
 + 
 +- Take pictures : 
 + 
 +  yavta -f SGRBG8 -s 320x240 -n 4 --capture=10 -F /dev/video0 
 + 
 +=====README===== 
 + 
 +====Environnements de travail==== 
 + 
 +  linux-omap-2.6        : 2.6.34 avec caspapx 
 +  linux-omap-2.6.35+    : 2.6.35 avec caspapx + isp modifié pour images brutes 
 +  linux-omap-2.6-thomas : 2.6.36 avec caspapx + KGDB 
 +  overo-oe              : avec openembedded et bitbake 
 +  pinchart              : non opérationnel, sous conseil de Laurent Pinchart pour media-ctl et yavta 
 + 
 +====Fabrication des modules pour le mt9v034==== 
 + 
 +  /home/thomas/exo 
 + 
 +====ISP==== 
 + 
 +- Placer un de ces dossiers dans : 
 + 
 +  linux.../drivers/media/video/ 
 + 
 +- Lui donner le nom : 
 + 
 +  isp 
 + 
 +- Recompiler un noyau : 
 + 
 +  export ARCH=arm 
 +  export CROSS_COMPILE=/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi- 
 +  export PATH=$PATH:/home/thomas/overo-oe/tmp/sysroots/i686-linux/usr/armv7a/bin/ 
 +  echo $CROSS_COMPILE 
 +  make uImage 
 + 
 +- Placer le uImage dans la partition 1 ROOT de la µSD 
 + 
 +- Les dossiers existants 
 + 
 +  isp-darkframe  : bloc preview configuré pour écrire une darkframe en mémoire à la place du traitement complet 
 +  isp-sauvegarde : isp original 
 +  isp-rawrgb     : bloc preview configuré pour annuler la débayerisation (CFA off), ne pas faire de conversion vers YUV, ... 
 + 
 +====V4L2==== 
 + 
 +  v4l2-save  : utilisé pour les données brutes issues de la caméra 
 +  v4l2-brute : utilisé pour les données brutes de la caméra, autre approche, moins évoluée 
 +  v4l2-new   : utilisé pour les données converties de YUV vers RGB 
 + 
 +====Default-caspapx==== 
 + 
 +  Prebuilt 2.6.34 caspapx et rootfs 
 + 
 +------------------------------------------------------- 
 +=====If you have questions : t.daveloose@laposte.net===== 
 +-------------------------------------------------------
gumstixthomas.txt · Dernière modification: 2021/02/19 21:20 (modification externe)