User:NicolasD: Difference between revisions

From ArmadeusWiki
No edit summary
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
Désolé de pourrir les 'recent changes' :)
Je suis Nicolas Duclos, j'ai 35 ans et je suis informaticien de formation avec un DESS (master) en info à Rennes.
 
==Truc utile==
==Truc utile==
===GRUB sur clé USB===
===GRUB sur clé USB===
Voici une petite astuce pour :
Voici une petite astuce pour :
* ne plus perdre GRUB lors de la réinstallation de Windows
* ne plus perdre GRUB lors de la réinstallation de Windows
* ne plus avoir accès à Windows après l'installation de Linux
* toujours accéder à Windows après l'(la ré-)installation de Linux... (oui oui ca arrive souvent :) )
* rendre inaccessible la partition Linux sur votre machine
* rendre inaccessible la partition Linux sur votre machine
L'astuce est d'installer ''que'' GRUB sur une clé USB. '''Attention, l'ordre des actions est important'''
L'astuce est d'installer ''que'' GRUB sur une clé USB.
{{Note| l'ordre des actions est important}}
* Formater la cle USB en fat32 (gparted)
* Formater la cle USB en fat32 (gparted)
* Récupérer la liste des disques monter ainsi que leur ID  
* Récupérer la liste des disques monter ainsi que leur ID  
Line 18: Line 20:
* installer Grub sur la clé USB
* installer Grub sur la clé USB
<pre class="host">
<pre class="host">
$ grub-install --no-floppy --root-directory=/media/disk /dev/sdb1 (remplacer sdb1 par la valeur récupérée avec la commande précédente)
$ grub-install --no-floppy --root-directory=/media/disk /dev/sdb1 (remplacer sdb1 par la valeur récupérée avec la commande précédente)
</pre>
</pre>
* demonter le disque USB
* demonter le disque USB
Line 34: Line 36:
sudo apt-get install libgtk2.0-dev  libglib2.0-dev  libglade2-dev
sudo apt-get install libgtk2.0-dev  libglib2.0-dev  libglade2-dev
</pre>
</pre>
==Banc à sable==
==Participation à la documentation Armadeus Project==
 
* [[Android]]
Ce qui suit n'est qu'un brouillon avec les fautes de frappes et d'orthographes comme il se doit.
 
 
==Prerequisites for Linux installation==
===Install needed software packages===
* Install these package for build the kernel image and for format the mmc/µSD card
<pre class="host">
$ sudo apt-get install uboot-mkimage mtd-utils
</pre>
* [[Toolchain]]
 
===Update the environment variables===
Theses environment variables install the Android and Armadeus folder in our home directory, but of course, it can be placed anywhere!
<pre class="config">
export ANDROID_SOURCE=~/apf27droid
export ANDROID_SDK=~/android-sdk-linux_x86-1.5_r3
export ARMADEUS=~/armadeus-3.1
export PATH=${PATH}:${ANDROID_SDK}/tools:${ANDROID_SOURCE}/bin
</pre>
==Construction of Android environment==
===Download Android source===
The [http://source.android.com/download getting Android source] document describes how to set up our local work environment.
Follow theses instructions until '''Installing Repo''' chapter.<br>
<pre class="host">
$ mkdir ANDROID_SOURCE
$ cd $ANDROID_SOURCE
$ mkdir bin
$ curl http://android.git.kernel.org/repo >$ANDROID_SOURCE/bin/repo
$ chmod a+x $ANDROID_SOURCE/bin/repo
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-sdk-1.5_r3
$ repo sync
</pre>
Since android-sdk-1.5_r3 branch, the Linux kernel isn't with the Android source,
We can download it in a compress archive (tar.gz) file with this [http://android.git.kernel.org/?p=kernel/common.git;a=snapshot;h=refs/heads/android-2.6.29;sf=tgz android-kernel-2.6.29] (about (70Mib) or with git repository (more 300Mib)
<pre class="host">
$ mkdir $ANDROID_SOURCE/kernel
$ cd $ANDROID_SOURCE/kernel
$ git clone git://android.git.kernel.org/kernel/common.git android-2.6.29
</pre>
 
===Apply the Armadeus patchset===
Before compiling the kernel, we patch the source with the Armadeus patches. In second time, I will give the URL to retrieve Linux 2.6.29.4 patch.
<pre class="host">
$ $ARMADEUS/buildroot/toolchain/patch-kernel.sh $ANDROID_SOURCE/kernel $ARMADEUS/downloads patch-2.6.29.4.bz2
$ $ARMADEUS/buildroot/toolchain/patch-kernel.sh $ANDROID_SOURCE/kernel $ARMADEUS/buildroot/toolchain/kernel-headers linux-2.6.29.4-\*.patch{,.gz,.bz2}
$ $ARMADEUS/buildroot/toolchain/patch-kernel.sh $ANDROID_SOURCE/kernel $ARMADEUS/buildroot/target/device/armadeus/linux/kernel-patches/2.6.29.4 \*.patch{,.gz,.bz2}
$ mkdir $ANDROID_SOURCE/kernel/drivers/armadeus
$ cp -r $ARMADEUS/target/linux/modules/* $ANDROID_SOURCE/kernel/drivers/armadeus
$ cp $ARMADEUS/target/device/armadeus/apf27/apf27-linux-2.6.29.config $ANDROID_SOURCE/kernel/arch/arm/configs/apf27_android_defconfig
</pre>
===Battery patch===
At the beginning, reboot happened over again even though Android logo appeared on board.
Result of investigation, we found that battery power was returned with 0 when boot..
To complete!!!
===Android kernel configuration===
Make sure your kernel boots normally on your board. Then enable some Android specific configuration and make sure that your kernel still boots (with your standard file system).
* EABI
<pre class="config">
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
</pre>
* THUMB
<pre class="config">
CONFIG_ARM_THUMB=y
</pre>
* Android drivers
<pre class="config">
#
# Android
#
# CONFIG_ANDROID_GADGET is not set
# CONFIG_ANDROID_RAM_CONSOLE is not set
CONFIG_ANDROID_POWER=y
CONFIG_ANDROID_POWER_STAT=y
CONFIG_ANDROID_LOGGER=y
# CONFIG_ANDROID_TIMED_GPIO is not set
CONFIG_ANDROID_BINDER_IPC=y
#AshMem
CONFIG_ASHMEM=y
</pre>
===compile Android kernel===
<pre class="host">
$ cd $ANDROID_SOURCE/kernel
$ make ARCH=arm mrproper
$ make ARCH=arm apf27_android_defconfig
$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi- uImage
$ cp ./arch/arm/boot/uImage $TFTPBOOT/apf27-linux.bin
</pre>
==Making SD card for boot==
===Copying the Android root filesystem===
Android’s root file system is generated in $ANDROID_SOURCE/out/target/product/generic
<pre class="host">
$ cd $ANDROID_SOURCE/out/target/product/generic
$ mkdir $ANDROID_SOURCE/rootfs (or '$ sudo rm -rf $ANDROID_SOURCE/rootfs/*' if the folder already exist )
$ cp -a root/* $ANDROID_SOURCE/rootfs/
$ cp -a system/* $ANDROID_SOURCE/rootfs/system/
$ cd $ANDROID_SOURCE/rootfs
$ sudo chown -R root.root .
$ sudo chmod -R a+rwX data system
</pre>
===Change init.rc===
Open $ANDROID_SOURCE/system/core/rootdir and comment the 'mount yaffs2' lines like this:
<pre class="config">
...
# mount mtd partitions
    # Mount /system rw first to give the filesystem a chance to save a checkpoint
    # mount yaffs2 mtd@system /system
    # mount yaffs2 mtd@system /system ro remount
 
    # We chown/chmod /data again so because mount is run as root + defaults
    # mount yaffs2 mtd@userdata /data nosuid nodev
    chown system system /data
    chmod 0771 /data
 
    # Same reason as /data above
    # mount yaffs2 mtd@cache /cache nosuid nodev
    chown system cache /cache
    chmod 0770 /cache
 
    # This may have been created by the recovery system with odd permissions
    chown system system /cache/recovery
    chmod 0770 /cache/recovery
...
</pre>
===Formatting an MMC/SD card===
We will create two partitions on our mmc/µSD card, The first one will use for Android memory card, the second one will use for Android file system.
First connect your card reader to your workstation, with the mmc/µSD card inside. Type the '''dmesg''' command to see which device is used by your workstation. Let’s assume that this device is '''/dev/sdb'''
<pre class="host">
$ dmesg
...
[ 9145.613954]  sdb: sdb1 sdb2
[ 9145.615125] sd 10:0:0:0: [sdc] Attached SCSI removable disk
[ 9145.615258] sd 10:0:0:0: Attached scsi generic sg3 type 0
</pre>
Type the mount command to check your currently mounted partitions. If MMC/SD partitions are mounted, unmount them.<br>
In a terminal edit partitions with fdisk:
<pre class="host">
sudo fdisk /dev/sdb
</pre>
Delete any existing partition with the d command.<br>
Now, create the boot partition:
<pre class="host">
Command (m for help): n
Command action
  e  extended
  p  primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-495, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-239, default 239): +1G
</pre>
Change its type to FAT32:
<pre class="host">
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): c
Changed system type of partition 1 to c (W95 FAT32 (LBA))
</pre>
Using the n command again, create a second partition filling up the rest of your card (just accept default values).<br>
Now, format the partitions in your card:
<pre class="host">
sudo mkfs.vfat -n MemoryCard -F 32 /dev/sdb1
sudo mkfs.ext2 -L AndroidFS /dev/sdb2
</pre>
Remove and insert your card again. Your new partitions should be mounted automatically.<br>
===Copying data to the MMC/SD card===
Now copy the Android root filesystem to the second partition.
<pre class="host">
sudo rsync -a $ANDROID_SOURCE/rootfs/ /media/AndroidFS/
</pre>
Finish by unmounting your mmc/µSD partitions:
<pre class="host">
sudo umount /media/MemoryCard
sudo umount /media/AndroidFS
</pre>
==Boot setup==
The last thing left to do is to specify how the board boots Linux.<br>
In the U-boot prompt, make the mmc boot is on second partition of the mmc/µSD card
<pre class="apf">
# setenv mmcroot '/dev/mmcblk0p2 rw'
</pre>
Now set the kernel command line arguments
<pre class="apf">
# setenv addmmcargs 'setenv bootargs ${bootargs} root=${mmcroot} rootfstype=${mmcrootfstype} init=\init androidboot.console=ttyS0'
# saveenvmtd-utils
</pre>
==Debug==
<pre class="apf">
# mount /dev/mmcblk0p2 /mnt/mmc
# strace -f -ff -tt -s 200 chroot /mnt/mmc /init androidboot.console=ttyS0
# strace  chroot /mnt/mmc /init androidboot.console=ttyS0
</pre>
===Test with Android emulator===
[http://developer.android.com/guide/developing/tools/emulator.html emulator]
<pre class="host">
$ make ARCH=arm goldfish_defconfig
$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi
# créer des AVD (Android Virtual Device)
$ ~/dev/android-sdk-linux_x86-1.5_r3/tools/android create avd -n APF27-H -t 2 -s 272x480
$ ~/dev/android-sdk-linux_x86-1.5_r3/tools/android create avd -n APF27-L -t 2 -s 480x272
$ $ANDROID/out/host/linux-x86/bin/emulator -avd APF27-H -sysdir $ANDROID/out/target/product/generic/ -kernel $ANDROID/kernel/arch/arm/boot/zImage -data $ANDROID/out/target/product/generic/userdata.img -ramdisk $ANDROID/out/target/product/generic/ramdisk.img -system $ANDROID/out/target/product/generic/system.img
</pre>
 
==Android Root File system==
Android emulator has 3 basic images on tools/lib/images directory.
* '''ramdisk.img''' is gziped cpio archive. ramdisk.img is a small partition image that is mounted read-only by the kernel at boot time. It only contains /init and a few config files. It is used to start init which will mount the rest of the system images properly and run the init procedure. A Ramdisk is a standard Linux feature. It is made just for the Android and do special things to start up the Android system.
* '''system.img''' is a partition image that will be mounted as / and thus contains all system binaries.
* '''userdata.img''' is a partition image that can be mounted as /data and thus contains all application-specific and user-specific data.
'''/system''' directory has libraries and default system packages (*.apk). /data directory has timezone, cache, and ''ApiDemos.apk'' package.<br>
The main services are zygote('''/system/bin/app_process'''), runtime('''/system/bin/runtime'''), and dbus('''/system/bin/dbus-daemon'''). You can see the '''/etc/init.rc''' file on the Android ramdisk image.
<pre class="apf">
...
zygote {
    exec /system/bin/app_process
    args {
        0 -Xzygote
        1 /system/bin
        2 --zygote
    }
    autostart 1
}
runtime {
    exec /system/bin/runtime
    autostart 1
}
...
dbus {
    exec /system/bin/dbus-daemon
    args.0 --system
    args.1 --nofork
    autostart 1
}
...
</pre>

Latest revision as of 15:01, 7 August 2009

Je suis Nicolas Duclos, j'ai 35 ans et je suis informaticien de formation avec un DESS (master) en info à Rennes.

Truc utile

GRUB sur clé USB

Voici une petite astuce pour :

  • ne plus perdre GRUB lors de la réinstallation de Windows
  • toujours accéder à Windows après l'(la ré-)installation de Linux... (oui oui ca arrive souvent :) )
  • rendre inaccessible la partition Linux sur votre machine

L'astuce est d'installer que GRUB sur une clé USB.

Note Note: l'ordre des actions est important
  • Formater la cle USB en fat32 (gparted)
  • Récupérer la liste des disques monter ainsi que leur ID
$ sudo blkid
/dev/sda1: UUID="CC5C86435C862872" TYPE="ntfs" 
/dev/sda5: UUID="aad30bf1-d620-4244-9fb5-42f4a38075fb" TYPE="ext3" 
/dev/sda6: TYPE="swap" UUID="e3163bab-1fcc-4bcd-844d-7dcabc35015c" 
/dev/sdb1: UUID="4C9D-547F" TYPE="vfat" 
  • installer Grub sur la clé USB
$ grub-install --no-floppy --root-directory=/media/disk /dev/sdb1 (remplacer sdb1 par la valeur récupérée avec la commande précédente)
  • demonter le disque USB
$ sudo umount /media/disk
  • Installer le MBR
$ sudo install-mbr /dev/sdb1
  • Mettre le flag boot sur la clé USB (gparted)

make gconfig

Installer les bibliothèques pour lancer make gconfig

sudo apt-get install libgtk2.0-dev  libglib2.0-dev  libglade2-dev

Participation à la documentation Armadeus Project