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
Dernière révision Les deux révisions suivantes
gumstixthomas [2013/10/28 16:16]
fbrenot ancienne révision (2013/06/13 12:25) restaurée
gumstixthomas [2013/10/28 16:21]
5.135.165.126 RAxjVnGRmquF
Ligne 1: Ligne 1:
- +<href="http:/zaym-5381.ru/home/next/5">site</a> 
-=====A-Z Create your own bootable MicroSD Card (8GB)====== +<href="​http://​credits-9303.ru/home/next/5">site</a> 
-------------------------------------------------------- +<href="​http://​loan-9036.ru/home/next/5">site</​a>​ 
- +<href="​http://​credit-8455.ru/home/next/5">site</​a>​ 
-====Context==== +<a href="http://dengi-2444.ru/home/next/5">site</​a>​ 
- +<a href="​http://​loans-3356.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://loan-8763.ru/home/next/5">site</a> 
- +<href="​http://​dengi-1704.ru/home/next/5">site</a> 
-====Hardware==== +<a href="http://dengi-9981.ru/home/next/5">site</a> 
- +<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 ​  ​* ​          ​1 ​          ​5 ​      ​40131 ​   c  W95 FAT32 (LBA) +
- +
-/​dev/​sdc2 ​              ​6 ​        ​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: 2013/10/28 22:26 par bvandepo