Difference between revisions of "User:NicolasD"

From ArmadeusWiki
Jump to: navigation, search
(Copying the Android root filesystem)
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
Désolé de pourrir les 'recents 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==
Marre de perdre GRUB lors de la réinstallation de Windows ou de perdre l'accès à Windows après à installer Linux (c'est mon cas)<br>
+
===GRUB sur clé USB===
ou tout simplement rendre inaccessible la partition Linux sur votre machine, voici un truc pour installer '''que''' GRUB sur une clé USB<br>
+
Voici une petite astuce pour :
''Attention, l'ordre des actions est important''
+
* ne plus perdre GRUB lors de la réinstallation de Windows
* Formatter la cle USB en fat32 (gparted)
+
* toujours accéder à Windows après l'(la ré-)installation de Linux... (oui oui ca arrive souvent :) )
* Récuperer la liste des disques monter ainsi que leur ID  
+
* rendre inaccessible la partition Linux sur votre machine
 +
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)
 +
* Récupérer la liste des disques monter ainsi que leur ID  
 
<pre class="host">
 
<pre class="host">
 
$ sudo blkid
 
$ sudo blkid
Line 13: Line 18:
 
/dev/sdb1: UUID="4C9D-547F" TYPE="vfat"  
 
/dev/sdb1: UUID="4C9D-547F" TYPE="vfat"  
 
</pre>
 
</pre>
* installer Grub sur la cle 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 25: Line 30:
 
$ sudo install-mbr /dev/sdb1
 
$ sudo install-mbr /dev/sdb1
 
</pre>
 
</pre>
* Mettre le flag boot sur la cle USB (gparted)
+
* Mettre le flag boot sur la clé USB (gparted)
 
+
===make gconfig===
==Banc à sable==
+
Installer les bibliothèques pour lancer make gconfig
 
+
 
+
 
+
==Prerequisites for Linux installation==
+
===Install needed software packages===
+
For build kernel image for the apf27 Armadeus plateform, we should install uboot-mkimage program
+
 
<pre class="host">
 
<pre class="host">
$ sudo apt-get install uboot-mkimage
+
sudo apt-get install libgtk2.0-dev  libglib2.0-dev  libglade2-dev
 
</pre>
 
</pre>
===Update the environment variables===
+
==Participation à la documentation Armadeus Project==
Theses environment variables install the Android and Armadeus folder in our home directory, but of course, it can be placed anywhere!
+
* [[Android]]
<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''.<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===
+
Je n'ai pas indiqué (a faire) dans les pré-requit, il faut naturelle avoir installé et compilé le projet Armadeus-3.1.
+
Dans un second temps, j'indiquerai les différentes actions pour ne pas être obliger à compiler le projet Armadeus, notamment pour la rustine patch-2.6.29.4.bz2
+
<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..
+
A effectuer!!!!
+
===update android kernel configuration for APF27===
+
C'est un point délicat, Google/Android ne donne '''aucune''' informations dessus
+
<pre class="config">
+
</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
+
$ 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===
+
 
+
==modifier les arguments pour le démarage du noyau==
+
<pre class="apf">
+
# setenv mmcroot '/dev/mmcblk0p2 rw'
+
# setenv addmmcargs 'setenv bootargs ${bootargs} root=${mmcroot} rootfstype=${mmcrootfstype} init=\init androidboot.console=ttyS0'
+
</pre>
+
 
+
#installer MTD Utilies
+
sudo apt-get install mtd-utils
+
mkfs.jffs2 -r ./android-source/out/target/product/generic/system -n -o /tftpboot/apf27-rootfs.arm.jffs2a
+
 
+
#installer les bibliothèques pour lancer make gconfig
+
sudo apt-get install libgtk2.0-dev  libglib2.0-dev  libglade2-dev
+
 
+
 
+
# modifier le fichier d'init.
+
/home/rennes/dev/android-source/out/target/product/generic/root/init.rc
+
 
+
$ cd $YOUR_PATH
+
$ mkdir rootfs
+
$ cd rootfs
+
$ rm -rf *
+
$ cp -Rfp ../android-source/out/target/product/generic/root/* .
+
$ cp -Rfp ../android-source/out/target/product/generic/system/ .
+
$ cp -Rfp ../android-source/out/target/product/generic/data/ .
+
$ tar cfvz ../apf27-rootfs-android.tar.gz ./
+
$ cd ..
+
$ sudo blkid
+
$ sudo mkfs.ext2 /dev/sdd1  (replace X with your MMC reader drive letter, if your Laptop has an integrated MMC reader then use mmcblk0p1 instead of sdX1)
+
$ sudo mkdir -p /media/mmc
+
$ sudo mount /dev/sdd1 /media/mmc
+
$ sudo tar xvf apf27-rootfs-android.tar.gz -C /media/mmc
+
$ sudo chmod -R 777 /media/mmc/*
+
 
+
Sur l'APF27
+
# 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
+
 
+
# tester android avec l'emulateur
+
$ 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
+
# cf http://developer.android.com/guide/developing/tools/emulator.html
+
$ $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
+
 
+
 
+
 
+
Android Root File system ¶
+
 
+
Android emulator has 3 basic images on tools/lib/images directory.
+
 
+
    * ramdisk.img
+
    * system.img
+
    * userdata.img
+
 
+
ramdisk.img is gziped cpio archive. ramdisk image is very small and contains configuration files, and some executable files such as init and recovery. The init file is not a regular system V init. It is made just for the Android and do special things to start up the Android system.
+
 
+
system.img and userdata.img are VMS Alpha executable. system.img and userdata.img have the contents of /system and /data directory on root file system. They are mapped on NAND devices with yaffs2 file system. /dev/block/mtdblock0 for /system and /dev/block/mtdblock1 for /data.
+
 
+
/system directory has libraries and default system packages (*.apk). /data directory has timezone, cache, and ApiDemos.apk package.
+
 
+
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.
+
 
+
...
+
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
+
}
+
...
+
 
+
 
+
 
+
Questions on ramdisk, userdata, and system img files
+
 
+
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.
+
 
+
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.
+
 
+
The build system generates these files, which can later be flashed to a real device, however the emulator uses them in a different way:
+
 
+
    * system.img is copied into a temporary file, which is used by the emulator session. So any change you make to / as root in the emulator are lost when the program exits
+
 
+
    * userdata.img is only used when you use -wipe-data. Instead, it uses ~/.android/userdata-qemu.img (on Unix) as the persistent /data partition image. Using -wipe-data simply copes the content of userdata.img into userdata-qemu.img
+

Latest revision as of 14: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