diff options
Diffstat (limited to 'documentation/dev-manual/dev-manual-kernel-appendix.xml')
-rw-r--r-- | documentation/dev-manual/dev-manual-kernel-appendix.xml | 344 |
1 files changed, 0 insertions, 344 deletions
diff --git a/documentation/dev-manual/dev-manual-kernel-appendix.xml b/documentation/dev-manual/dev-manual-kernel-appendix.xml index 6b87eaa427..3ac49b92cf 100644 --- a/documentation/dev-manual/dev-manual-kernel-appendix.xml +++ b/documentation/dev-manual/dev-manual-kernel-appendix.xml | |||
@@ -811,352 +811,8 @@ | |||
811 | width="2in" depth="3in" align="center" scalefit="1" /> | 811 | width="2in" depth="3in" align="center" scalefit="1" /> |
812 | </para> | 812 | </para> |
813 | </section> | 813 | </section> |
814 | |||
815 | |||
816 | |||
817 | <!-- <section id='is-vfat-supported'> | ||
818 | <title>Is VFAT Supported?</title> | ||
819 | |||
820 | <para> | ||
821 | <literallayout class='monospaced'> | ||
822 | I entered runqemu qemux86 and it fires upthis fires up the emulator and uses the | ||
823 | image and filesystem in the build area created in the previous section. | ||
824 | |||
825 | Then I copied over a pre-created and formated 5.2MB VFAT file named vfat.img. | ||
826 | I did this with scp vfat.img root@192.168.7.2: | ||
827 | The file is in the root directory. | ||
828 | I had to do this because the mkfs.vfat vfat.img command does not work. | ||
829 | mkfs is not recognized in the qemu terminal session. | ||
830 | |||
831 | when I try mount -o loop -t vfat vfat.img mnt/ I get the error | ||
832 | mount: can't set up loop device: No space left on device. | ||
833 | This error is because the loop module is not currently in the kernel image. | ||
834 | However, this module is available in the | ||
835 | build area in the tarball modules-2.6.37.6-yocto-starndard+-20-qemux86.tgz. | ||
836 | You can add this to the kernel image by adding the | ||
837 | IMAGE_INSTALL += " kernel-module-loop" statement at the top of the local.conf | ||
838 | file in the build area and then rebuilding the kernel using bitbake. | ||
839 | It should just build whatever is necessary and not go through an entire build again. | ||
840 | |||
841 | |||
842 | |||
843 | |||
844 | The <filename>menuconfig</filename> tool provides an interactive method with which | ||
845 | to set kernel configurations. | ||
846 | In order to use <filename>menuconfig</filename> from within the BitBake environment | ||
847 | you need to source an environment setup script. | ||
848 | This script is located in the local Yocto Project file structure and is called | ||
849 | <filename>oe-init-build-env</filename>. | ||
850 | </para> | ||
851 | |||
852 | <para> | ||
853 | The following command sets up the environment: | ||
854 | <literallayout class='monospaced'> | ||
855 | $ cd ~/poky | ||
856 | $ source oe-init-build-env | ||
857 | $ runqemu qemux86 | ||
858 | Continuing with the following parameters: | ||
859 | KERNEL: [/home/scottrif/poky/build/tmp/deploy/images/bzImage-qemux86.bin] | ||
860 | ROOTFS: [/home/scottrif/poky/build/tmp/deploy/images/core-image-sato-qemux86.ext3] | ||
861 | FSTYPE: [ext3] | ||
862 | Setting up tap interface under sudo | ||
863 | Acquiring lockfile for tap0... | ||
864 | WARNING: distccd not present, no distcc support loaded. | ||
865 | Running qemu... | ||
866 | /home/scottrif/poky/build/tmp/sysroots/x86_64-linux/usr/bin/qemu | ||
867 | -kernel /home/scottrif/poky/build/tmp/deploy/images/bzImage-qemux86.bin | ||
868 | -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no,downscript=no | ||
869 | -hda /home/scottrif/poky/build/tmp/deploy/images/core-image-sato-qemux86.ext3 | ||
870 | -show-cursor -usb -usbdevice wacom-tablet -vga vmware -enable-gl -no-reboot | ||
871 | -m 128 ‐‐append "vga=0 root=/dev/hda rw mem=128M ip=192.168.7.2::192.168.7.1:255.255.255.0 oprofile.timer=1 " | ||
872 | Enabling opengl | ||
873 | vmsvga_value_write: guest runs Linux. | ||
874 | </literallayout> | ||
875 | </para> | ||
876 | </section> | ||
877 | |||
878 | <section id='prepare-to-use-menuconfig'> | ||
879 | <title>Prepare to use <filename>menuconfig</filename></title> | ||
880 | |||
881 | |||
882 | <para> | ||
883 | [WRITER'S NOTE: Stuff from here down are crib notes] | ||
884 | </para> | ||
885 | |||
886 | <para> | ||
887 | Once menuconfig fires up you see all kinds of categories that you can interactively | ||
888 | investigate. | ||
889 | If they have an "M" in it then the feature is "modularized". | ||
890 | I guess that means that means that it needs to be manually linked in when the | ||
891 | kernel is booted??? (Not sure). | ||
892 | If they have an "*" then the feature is automatically part of the kernel.] | ||
893 | </para> | ||
894 | |||
895 | <para> | ||
896 | So the tmp/work/ area was created in poky and there is a .config file in there and | ||
897 | a .config.old file. | ||
898 | The old one must have been created when I exited from menuconfig after poking around | ||
899 | a bit. | ||
900 | Nope - appears to just be created automatically. | ||
901 | </para> | ||
902 | |||
903 | <para> | ||
904 | A good practice is to first determine what configurations you have for the kernel. | ||
905 | You can see the results by looking in the .config file in the build/tmp/work/qemux86-poky-linux area | ||
906 | of the local YP files. | ||
907 | There is a directory named linux-yocto-2.6.37* in the directory. | ||
908 | In that directory is a directory named linux-qemux86-standard-build. | ||
909 | In that directory you will find a file named .config that is the configuration file | ||
910 | for the kernel that will be used when you build the kernel. | ||
911 | You can open that file up and examine it. | ||
912 | If you do a search for "VFAT" you will see that that particular configuration is not | ||
913 | enabled for the kernel. | ||
914 | This means that you cannot print a VFAT text file, or for that matter, even mount one | ||
915 | from the image if you were to build it at this point. | ||
916 | </para> | ||
917 | |||
918 | <para> | ||
919 | You can prove the point by actually trying it at this point. | ||
920 | Here are the commands: | ||
921 | <literallayout class='monospaced'> | ||
922 | $ mkdir ~/vfat-test | ||
923 | $ cd ~/vfat-test | ||
924 | $ dd if=/dev/zero of=vfat.img bs=1024 count=5000 [creates a 5MB disk image] | ||
925 | 5+0 records in | ||
926 | 5+0 records out | ||
927 | 5242880 bytes (5.2 MB) copied, 0.00798912 s, 656 MB/s | ||
928 | $ ls -lah [lists the contents of the new image. l=long, a=all, h=human readable] | ||
929 | total 5.1M | ||
930 | drwxr-xr-x 2 srifenbark scottrif 4.0K 2011-08-01 08:18 . | ||
931 | drwxr-xr-x 66 srifenbark scottrif 4.0K 2011-08-01 08:14 .. | ||
932 | -rw-r‐‐r‐‐ 1 srifenbark scottrif 5.0M 2011-08-01 08:18 vfat.img | ||
933 | $ mkfs.vfat vfat.img [formats the disk image] | ||
934 | mkfs.vfat 3.0.7 (24 Dec 2009) | ||
935 | $ mkdir mnt [mounts the disk image] | ||
936 | $ sudo su [gives you root privilege] | ||
937 | # mount -o loop vfat.img mnt [mounts it as a loop device] | ||
938 | # ls mnt [shows nothing in mnt] | ||
939 | # mount [lists the mounted filesystems - note/dev/loop0] | ||
940 | /dev/sda1 on / type ext4 (rw,errors=remount-ro) | ||
941 | proc on /proc type proc (rw,noexec,nosuid,nodev) | ||
942 | none on /sys type sysfs (rw,noexec,nosuid,nodev) | ||
943 | none on /sys/fs/fuse/connections type fusectl (rw) | ||
944 | none on /sys/kernel/debug type debugfs (rw) | ||
945 | none on /sys/kernel/security type securityfs (rw) | ||
946 | none on /dev type devtmpfs (rw,mode=0755) | ||
947 | none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) | ||
948 | none on /dev/shm type tmpfs (rw,nosuid,nodev) | ||
949 | none on /var/run type tmpfs (rw,nosuid,mode=0755) | ||
950 | none on /var/lock type tmpfs (rw,noexec,nosuid,nodev) | ||
951 | none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755) | ||
952 | binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) | ||
953 | gvfs-fuse-daemon on /home/scottrif/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=srifenbark) | ||
954 | /dev/loop0 on /home/scottrif/vfat-test/mnt type vfat (rw) | ||
955 | # echo "hello world" > mnt/hello.txt [creates a text file in the mounted VFAT system] | ||
956 | # ls mnt [verifies the file is there] | ||
957 | hello.txt | ||
958 | # cat mnt/hello.txt [displays the contents of the file created] | ||
959 | hello world | ||
960 | # umount mnt [unmounts the system and destroys the loop] | ||
961 | # exit [gets out of privileged user mode] | ||
962 | exit | ||
963 | |||
964 | $ lsmod [this stuff Darren did to show me ] | ||
965 | Module Size Used by [the status of modules in the regular linux kernel] | ||
966 | nls_iso8859_1 4633 0 | ||
967 | nls_cp437 6351 0 | ||
968 | vfat 10866 0 | ||
969 | fat 55350 1 vfat | ||
970 | snd_hda_codec_atihdmi 3023 1 | ||
971 | binfmt_misc 7960 1 | ||
972 | snd_hda_codec_realtek 279008 1 | ||
973 | ppdev 6375 0 | ||
974 | snd_hda_intel 25805 2 | ||
975 | fbcon 39270 71 | ||
976 | tileblit 2487 1 fbcon | ||
977 | font 8053 1 fbcon | ||
978 | bitblit 5811 1 fbcon | ||
979 | snd_hda_codec 85759 3 snd_hda_codec_atihdmi,snd_hda_codec_realtek,snd_hda_intel | ||
980 | softcursor 1565 1 bitblit | ||
981 | snd_seq_dummy 1782 0 | ||
982 | snd_hwdep 6924 1 snd_hda_codec | ||
983 | vga16fb 12757 0 | ||
984 | snd_pcm_oss 41394 0 | ||
985 | snd_mixer_oss 16299 1 snd_pcm_oss | ||
986 | snd_pcm 87946 3 snd_hda_intel,snd_hda_codec,snd_pcm_oss | ||
987 | vgastate 9857 1 vga16fb | ||
988 | snd_seq_oss 31191 0 | ||
989 | snd_seq_midi 5829 0 | ||
990 | snd_rawmidi 23420 1 snd_seq_midi | ||
991 | radeon 744506 3 | ||
992 | snd_seq_midi_event 7267 2 snd_seq_oss,snd_seq_midi | ||
993 | ttm 61007 1 radeon | ||
994 | snd_seq 57481 6 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_seq_midi_event | ||
995 | drm_kms_helper 30742 1 radeon | ||
996 | snd_timer 23649 2 snd_pcm,snd_seq | ||
997 | snd_seq_device 6888 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi,snd_rawmidi,snd_seq | ||
998 | usb_storage 50377 0 | ||
999 | snd 71283 16 \ | ||
1000 | snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec, \ | ||
1001 | snd_hwdep,snd_pcm_oss,snd_mixer_oss,snd_pcm, \ | ||
1002 | snd_seq_oss,snd_rawmidi,snd_seq,snd_timer,snd_seq_device | ||
1003 | soundcore 8052 1 snd | ||
1004 | psmouse 65040 0 | ||
1005 | drm 198886 5 radeon,ttm,drm_kms_helper | ||
1006 | i2c_algo_bit 6024 1 radeon | ||
1007 | serio_raw 4918 0 | ||
1008 | snd_page_alloc 8500 2 snd_hda_intel,snd_pcm | ||
1009 | dell_wmi 2177 0 | ||
1010 | dcdbas 6886 0 | ||
1011 | lp 9336 0 | ||
1012 | parport 37160 2 ppdev,lp | ||
1013 | usbhid 41116 0 | ||
1014 | ohci1394 30260 0 | ||
1015 | hid 83888 1 usbhid | ||
1016 | ieee1394 94771 1 ohci1394 | ||
1017 | tg3 122382 0 | ||
1018 | </literallayout> | ||
1019 | </para> | ||
1020 | </section> | ||
1021 | </section> --> | ||
1022 | </appendix> | 814 | </appendix> |
1023 | 815 | ||
1024 | <!-- | 816 | <!-- |
1025 | |||
1026 | |||
1027 | EXTRA STUFF I MIGHT NEED BUT NOW SURE RIGHT NOW. | ||
1028 | |||
1029 | In the standard layer structure you have several areas that you need to examine or | ||
1030 | modify. | ||
1031 | For this example the layer contains four areas: | ||
1032 | <itemizedlist> | ||
1033 | <listitem><para><emphasis><filename>conf</filename></emphasis> - Contains the | ||
1034 | <filename>layer.conf</filename> that identifies the location of the recipe files. | ||
1035 | </para></listitem> | ||
1036 | <listitem><para><emphasis><filename>images</filename></emphasis> - Contains the | ||
1037 | image recipe file. | ||
1038 | This recipe includes the base image you will be using and specifies other | ||
1039 | packages the image might need.</para></listitem> | ||
1040 | <listitem><para><emphasis><filename>recipes-bsp</filename></emphasis> - Contains | ||
1041 | recipes specific to the hardware for which you are developing the kernel. | ||
1042 | </para></listitem> | ||
1043 | <listitem><para><emphasis><filename>recipes-kernel</filename></emphasis> - Contains the | ||
1044 | "append" files that add information to the main recipe kernel. | ||
1045 | </para></listitem> | ||
1046 | </itemizedlist> | ||
1047 | </para> | ||
1048 | |||
1049 | <para> | ||
1050 | Let's take a look at the <filename>layer.conf</filename> in the | ||
1051 | <filename>conf</filename> directory first. | ||
1052 | This configuration file enables the Yocto Project build system to locate and | ||
1053 | use the information in your new layer. | ||
1054 | </para> | ||
1055 | |||
1056 | <para> | ||
1057 | The variable <filename>BBPATH</filename> needs to include the path to your layer | ||
1058 | as follows: | ||
1059 | <literallayout class='monospaced'> | ||
1060 | BBPATH := "${BBPATH}:${LAYERDIR}" | ||
1061 | </literallayout> | ||
1062 | And, the variable <filename>BBFILES</filename> needs to be modified to include your | ||
1063 | recipe and append files: | ||
1064 | <literallayout class='monospaced'> | ||
1065 | BBFILES := "${BBFILES} ${LAYERDIR}/images/*.bb \ | ||
1066 | ${LAYERDIR}/images/*.bbappend \ | ||
1067 | ${LAYERDIR}/recipes-*/*/*.bb \ | ||
1068 | ${LAYERDIR}/recipes-*/*/*.bbappend" | ||
1069 | </literallayout> | ||
1070 | Finally, you need to be sure to use your layer name in these variables at the | ||
1071 | end of the file: | ||
1072 | <literallayout class='monospaced'> | ||
1073 | BBFILE_COLLECTIONS += "elc" | ||
1074 | BBFILE_PATTERN_elc := "^${LAYERDIR}/" | ||
1075 | BBFILE_PRIORITY_elc = "9" | ||
1076 | </literallayout> | ||
1077 | </para> | ||
1078 | |||
1079 | <para> | ||
1080 | The <filename>images</filename> directory contains an append file that helps | ||
1081 | further define the image. | ||
1082 | In our example, the base image is <filename>core-image-minimal</filename>. | ||
1083 | The image does, however, need some additional modules that we are using | ||
1084 | for this example. | ||
1085 | These modules support the amixer functionality. | ||
1086 | Here is the append file: | ||
1087 | <literallayout class='monospaced'> | ||
1088 | require recipes-core/images/poky-image-minimal.bb | ||
1089 | |||
1090 | IMAGE_INSTALL += "dropbear alsa-utils-aplay alsa-utils-alsamixer" | ||
1091 | IMAGE_INSTALL_append_qemux86 += " kernel-module-snd-ens1370 \ | ||
1092 | kernel-module-snd-rawmidi kernel-module-loop kernel-module-nls-cp437 \ | ||
1093 | kernel-module-nls-iso8859-1 qemux86-audio alsa-utils-amixer" | ||
1094 | |||
1095 | LICENSE = "MIT" | ||
1096 | </literallayout> | ||
1097 | </para> | ||
1098 | |||
1099 | <para> | ||
1100 | While the focus of this example is not on the BSP, it is worth mentioning that the | ||
1101 | <filename>recipes-bsp</filename> directory has the recipes and append files for | ||
1102 | features that the hardware requires. | ||
1103 | In this example, there is a script and a recipe to support the | ||
1104 | <filename>amixer</filename> functionality in QEMU. | ||
1105 | It is beyond the scope of this manual to go too deeply into the script. | ||
1106 | Suffice it to say that the script tests for the presence of the mixer, sets up | ||
1107 | default mixer values, enables the mixer, unmutes master and then | ||
1108 | sets the volume to 100. | ||
1109 | </para> | ||
1110 | |||
1111 | <para> | ||
1112 | The recipe <filename>qemu86-audio.bb</filename> installs and runs the | ||
1113 | <filename>amixer</filename> when the system boots. | ||
1114 | Here is the recipe: | ||
1115 | <literallayout class='monospaced'> | ||
1116 | SUMMARY = "Provide a basic init script to enable audio" | ||
1117 | DESCRIPTION = "Set the volume and unmute the Front mixer setting during boot." | ||
1118 | SECTION = "base" | ||
1119 | LICENSE = "MIT" | ||
1120 | LIC_FILES_CHKSUM = "file://${POKYBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58" | ||
1121 | |||
1122 | PR = "r4" | ||
1123 | |||
1124 | inherit update-rc.d | ||
1125 | |||
1126 | RDEPENDS = "alsa-utils-amixer" | ||
1127 | |||
1128 | SRC_URI = "file://qemux86-audio" | ||
1129 | |||
1130 | INITSCRIPT_NAME = "qemux86-audio" | ||
1131 | INITSCRIPT_PARAMS = "defaults 90" | ||
1132 | |||
1133 | do_install() { | ||
1134 | install -d ${D}${sysconfdir} \ | ||
1135 | ${D}${sysconfdir}/init.d | ||
1136 | install -m 0755 ${WORKDIR}/qemux86-audio ${D}${sysconfdir}/init.d | ||
1137 | cat ${WORKDIR}/${INITSCRIPT_NAME} | \ | ||
1138 | sed -e 's,/etc,${sysconfdir},g' \ | ||
1139 | -e 's,/usr/sbin,${sbindir},g' \ | ||
1140 | -e 's,/var,${localstatedir},g' \ | ||
1141 | -e 's,/usr/bin,${bindir},g' \ | ||
1142 | -e 's,/usr,${prefix},g' > ${D}${sysconfdir}/init.d/${INITSCRIPT_NAME} | ||
1143 | chmod 755 ${D}${sysconfdir}/init.d/${INITSCRIPT_NAME} | ||
1144 | } | ||
1145 | </literallayout> | ||
1146 | </para> | ||
1147 | |||
1148 | <para> | ||
1149 | The last area to look at is <filename>recipes-kernel</filename>. | ||
1150 | This area holds configuration fragments and kernel append files. | ||
1151 | The append file must have the same name as the kernel recipe, which is | ||
1152 | <filename>linux-yocto-2.6.37</filename> in this example. | ||
1153 | The file can <filename>SRC_URI</filename> statements to point to configuration | ||
1154 | fragments you might have in the layer. | ||
1155 | The file can also contain <filename>KERNEL_FEATURES</filename> statements that specify | ||
1156 | included kernel configurations that ship with the Yocto Project. | ||
1157 | </para> | ||
1158 | --> | ||
1159 | |||
1160 | <!-- | ||
1161 | vim: expandtab tw=80 ts=4 | 817 | vim: expandtab tw=80 ts=4 |
1162 | --> | 818 | --> |