# boot-directdisk.bbclass
# (loosly based off bootimg.bbclass Copyright (C) 2004, Advanced Micro Devices, Inc.)
#
# Create an image which can be placed directly onto a harddisk using dd and then
# booted.
#
# This uses syslinux. extlinux would have been nice but required the ext2/3
# partition to be mounted. grub requires to run itself as part of the install
# process.
#
# The end result is a 512 boot sector populated with an MBR and partition table
# followed by an msdos fat16 partition containing syslinux and a linux kernel
# completed by the ext2/3 rootfs.
#
# We have to push the msdos parition table size > 16MB so fat 16 is used as parted
# won't touch fat12 partitions.
# External variables needed
# ${ROOTFS} - the rootfs image to incorporate
do_bootdirectdisk[depends] += "dosfstools-native:do_populate_sysroot \
syslinux:do_populate_sysroot \
syslinux-native:do_populate_sysroot \
parted-native:do_populate_sysroot \
mtools-native:do_populate_sysroot "
PACKAGES = " "
EXCLUDE_FROM_WORLD = "1"
HDDDIR = "${S}/hdd/boot"
HDDIMG = "${S}/hdd.image"
BOOTDD_VOLUME_ID ?= "boot"
BOOTDD_EXTRA_SPACE ?= "16384"
# Get the build_syslinux_cfg() function from the syslinux class
AUTO_SYSLINUXCFG = "1"
SYSLINUX_ROOT ?= "root=/dev/sda2"
SYSLINUX_TIMEOUT ?= "10"
inherit syslinux
build_boot_dd() {
IMAGE=${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.hdddirect
install -d ${HDDDIR}
install -m 0644 ${STAGING_KERNEL_DIR}/bzImage ${HDDDIR}/vmlinuz
install -m 0644 ${S}/syslinux.cfg ${HDDDIR}/syslinux.cfg
install -m 444 ${STAGING_LIBDIR}/syslinux/ldlinux.sys ${HDDDIR}/ldlinux.sys
BLOCKS=`du -bks ${HDDDIR} | cut -f 1`
BLOCKS=`expr $BLOCKS + ${BOOTDD_EXTRA_SPACE}`
# Ensure total sectors is an integral number of sectors per
# track or mcopy will complain. Sectors are 512 bytes, and we
# generate images with 32 sectors per track. This calculation is
# done in blocks, thus the mod by 16 instead of 32.
BLOCKS=$(expr $BLOCKS + $(expr 16 - $(expr $BLOCKS % 16)))
mkdosfs -n ${BOOTDD_VOLUME_ID} -S 512 -C ${HDDIMG} $BLOCKS
mcopy -i ${HDDIMG} -s ${HDDDIR}/* ::/
syslinux ${HDDIMG}
chmod 644 ${HDDIMG}
ROOTFSBLOCKS=`du -Lbks ${ROOTFS} | cut -f 1`
TOTALSIZE=`expr $BLOCKS + $ROOTFSBLOCKS`
END1=`expr $BLOCKS \* 1024`
END2=`expr $END1 + 512`
END3=`expr \( $ROOTFSBLOCKS \* 1024 \) + $END1`
echo $ROOTFSBLOCKS $TOTALSIZE $END1 $END2 $END3
rm -rf $IMAGE
dd if=/dev/zero of=$IMAGE bs=1024 seek=$TOTALSIZE count=1
parted $IMAGE mklabel msdos
parted $IMAGE mkpart primary fat16 0 ${END1}B
parted $IMAGE unit B mkpart primary ext2 ${END2}B ${END3}B
parted $IMAGE set 1 boot on
parted $IMAGE print
OFFSET=`expr $END2 / 512`
dd if=${STAGING_LIBDIR}/syslinux/mbr.bin of=$IMAGE conv=notrunc
dd if=${HDDIMG} of=$IMAGE conv=notrunc seek=1 bs=512
dd if=${ROOTFS} of=$IMAGE conv=notrunc seek=$OFFSET bs=512
cd ${DEPLOY_DIR_IMAGE}
rm -f ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hdddirect
ln -s ${IMAGE_NAME}.hdddirect ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.hdddirect
}
python do_bootdirectdisk() {
bb.build.exec_func('build_syslinux_cfg', d)
bb.build.exec_func('build_boot_dd', d)
}
addtask bootdirectdisk before do_build
do_bootdirectdisk[nostamp] = "1"
Xó°Yyk ç«t€:^#ÀPêÌdIp6™é¢ˆl‚‡S#�$À´ØD=<ž�¹"×ý©
¦‚ÃZG4
Ф9]0a&ˆê¢\r¥Ko.aДúØtšºLÔTÓ9(Ö¦HGeЬ
«7s›´båe0=�²
C™í
@[|Ò¥
1<ºsŒªqÁV¼C~/w0Ô[¢‚E'0.ÝlMâ¬ì¨ÖûáYRZ �—ÍH—&+iÊz
¸ŒC
Ù8t»Á4kísqur÷–°\ˆkLaè›W*��Àô9OMŽ\»ç_úËs{v¶ù~ì7¾ÓÇ»¸¼k�5;Àøâbß
ÐøNÇŒ›8 l.U
0n0ntlàÝÖzvƼ
XøA…Mgý‡ ¿”NJ�oAÆBìfÛ‘UÌzc†t´ŸD®h«(¢?�t¢„ŽFï‹·�ËS('«�$!2¥¢Jº–¡P’%¢!ËøR»09@T4rç’ 33É\\ÜÙ¨/³À†rÀ×fü[‰ç‹;pÑ�HD]•¥”ÈÉqlÔ3Z÷ú`t;%(£×îŽ ”>ëˆÚĹNÌ›{X§Ftߣҧ£l¤ñf¥íÞ:!ú
,hg-¦�w m'YeHH`5Tù*Ö½‹ \S‘“¥¼U„:äÝS:/]óg<‰Œô�ý�3¬ò>±{³°ZXhR�2.¥KŠëÚÖkè@nû
§B/0Ü&Ñ-6íÐ1JU�º]�´‡°HaP?.ž{u`«¨0ÜóGOT'al¡‘êŒëUE4u.q�
›4*Ï\³Jd¾»U�(„×rJérÓVÅ„7¹S—SÖý%Ä~^#'•l.`Sē͈¼}`Ev‹§-¦Ìh1ôøÅÕ.!oG/mjm£‰]Ùšb‰p=YÞäž\Ë\WCõ²®(u?ì2rõ—öçÐâêÚ$¬”g'±d¸9 ƒM2tC[Ðüal—¿Å¸þîym.5º.=³ðÎXFÇÅö,Ç
ºdIÀ¾g»ëõFb\�u¥úš¢{ßpäú-(”," =xÅa®'Y’êHÅfýXÉp¹¾>íÝ�ÎäL¯¹lÁv9ÅCŒ+Ðü±ø`•ª*~([¸¢ŒGsñ�Ž"H{�
ž 8æUIáêˆt¶Ï"G¦YÀÞÛö²ÞKÇmËË
ø^í?^å@¼¡ki…Ë,QÿøèéüÍfZ‹«ÕÉF©výì@4—Põ¶•ò™è ¿æ'¢‡–Õkö;rbUPæÒèÜ…ôÛûÊñü׬é®q/eÝ|êEE¾
‚ç^çË6„î¿Ä =o¼_eÄDØQ¨¼›¨
*ÕV
«“9KmæX¼r!/Û|¼{��ö�r‚Œ'ª*~\5äyà…Ü\5Ø”$Gû)y×ðf°b•âˆû\è«D¹EG�D�".0²*ÁJ#N]mÇÂã¤, �hàFdgÇ;bT 'k?²FVÏ%Ú§»|rŒˆ�÷®õƒ—ià»õGøŠCq§§†ŽØqõx?øäõÝû«�÷çWŸ€ÙŠO>|8¹¹ÿd'» k°F¬u‰ÿ†Œa4>‚¸6¼úÔ{Z&ǃWLgÇýVP§Ç È26ø+‹·p¥lúx�Ðô3+ÄZŠ#_\lwkHõb+$잉’.�u‡þ�?øÝÖ=tóa·ò¥-úÀ
mÃæö°öû7Â…¿·:öÚþn/+¤YJ#"e º,žd\Ü©|Hw|ú[¶Pe±^õ‚z�“‹BÝ�Ÿ&ÚEÔ|ñºÎË^Ž=G÷}ÜÅXÕ<šÍ3U"Á3¹Ð½Þ«#ðVHŽE…œŽ \ìü1JCÌþ-˜ð-¥ ¯¾GïÄ›úÖWËÖƒ>=³ãbÙ=à’¸‡ÆÊÝ:õ´Tw J6Sto/Q ¡ 3æ"Ì܉ò�Œ\ÚçÐäQqɉO;Ê�·æ©½Ø`'@/YKò¸~ãS!’–ËW¤»`‹Ä¬_G'Ååv€‡âEãc¢)‹f¥ã!rÐU~l‰À[ùáüÞò?ºŽ…0L”¡!;(Å*ËsiA¡€„u0N6xØš`Õ8øýò,�UT
šÑÑRuÒDU;wc¦‘sÇx=¶#~Áƒ}•êr6Ç>ÏÎaÙz{»�+1º~
x¾Üe®DC
Èe<<],éŠ
ÊåÙ…VsÿMYDÂCnî¬Òm=K#<΄
òÀþ Ò£jEüNV á f¹²”5 ¿
©js^Ü1ÖÉ�™PÃ^ç“v# ÄðrPÛHõý‘?
H† 2ë
Cºf„:õ²pJw7°ÐÞŽgÆ»»vB«o Q2á}j}!˜mÙ¶„뛥ٸ,B㱊Áuûz˜`-]´G#û HB*l´å÷$˜Äýlˆõçõcm¦Ëéaó1לBËÕñHL'ðê8×øÇrG˜�`X)½6[ól‚´»ö@‡N”;ð;NNê²R£h
³âlð>‘uw^2®/Ø{p®¨9âRëΞ“þHE:,Ua}@ÊL¦8»‹î¯h*WŸg—Ï¡•òFp;è﹦|�öëK l)ÃT^n�‹Ð
i]#„5ËXÏ@‹K`ær…hе ð$bͽ¹&BÑ]…¤Lí¥E¾]DQHØø©ÚûwUáÌ®‹ò6\\u!ÒïX£Õ„V¥:^�—!,f ›Ø�§2.*ê·^BCCCrþ«î³~+§~)³ ”f˜¯`)î9!m׿Uà÷×'·öoÖì[„<|Ðõ�a�øÁ¥°PXÖrÿ° è"šFöêh̯ë õ}y&çnØt�'S[•·ì…Á•ƒ{%Ô�GºpO�ÿ Œ/º0®O÷açzសͳÿœÿ/{oßݶ‘ä�î¿Ësö; Ôú!9¦¨¿e”È3²$ÇÚ‘%$'“£øò‚$(aM€´Ì™�ûÙoýªªÝ HIŽ“™Ý'<‰EýZ]]]U]/Úðú“Φj9k¦ôžéiÃUݵVõ5Ïz.æOËŽµÄ£ÞðÙ÷݃8›¥1ñzÛA»‚o\ìvÇšPq�Pž0àü®&rü/+ÄvRõ¼¸q�xØ÷fNX&~Å-•XZQ°ëq]daRß39/
ç¡[wabD:0nŒñ¬‘©o‹Œ0ôÖ1‡T±Ð2*’µi’`Ì!´¢A¤
»œ´”Ãlƒþ¥Æ†Ìòé
v„¿÷ç”Z¶}ýCðÐú>üGrõ†˜X¦^€Ds³Tå^~Ó�îïêGNÚ¼y¢½¼Ð/Š@9¯cbu€ù"-‹¬¨c˜”ã3 tYI’é&pÔ'VX£Ý¢öã½Do»Ak¹è-Èð=¼î¥º ¶½¦ún;Ü.¬zùË3óå¹~ùZ¿ÐêtôìÏ{ÛÏ>)%…·ëMD8;ØSañûïöéä»_Om¢ HØWÖ!�Ë©Á©5¾8Ø 1œÄþk9ع¿PØÐ$¾Ö¹è1$cº B%”4)¢`cÐN¡ŠóÂJdA],X`6:†úÓ{avÞ|°1
g7³dc¼Xï×ÑüFÞtMè�~¢BŠ1™àá+2s‹@d;\;R›ò—÷o¡ÑÊAæíÕ„šAª‘V Ñg‚¦þîd7ÆV„º© y¹»Xh³r€yU–NÙJ
YÃU?ýS=WqUP÷`ÏL/€jËìûp:�ÂÔЂׄÓpB8lÈÊþM‚@jèV§2 ‡O[%™Úê†ÑëÎ샕5Åã¼Mü1·Ã÷€SñƒÀXÌlÒ¦ JÜöï;Á[{LìíçÒ¼UÕ£ÔÖfyÔ»œÜ¬Wç ;€ú�QF³`É(£AîrkKS0±SE¦ŒÛp´�Ë"1TwåaÆ
Uô:g³áO\_5)Ý2Áôü£J&mYd�x]!{:–hnc¾)ÇÄ5Æ¢Æh9õH[Éi_Ù®†•.ŒèP̤jqZÇ“ºêæxvuã
’#G%@ªÜÁîǘW‚‡›s™ì
(e8|y‹ÁŠ’‰i÷DYö�ä—¸Ÿ&jZ{©°°²ÜEGm3æ�p'¯ê¯�ÀÄr$MÖ(;‘K§VM˜égA~«¡·z#ÌHþ3Ú.›o_µƒÚSüµ[ôâàO-=ñ=G"Þ¾0¿ s«^IÖA0`>Êg›ürˈÒ}Ñql± 4k“aá4Ë…øðða·3(êYÖI{@@ÕgÔ,«ˆ-(ìYõIÈØÑ¡ê�ë¿ÎB{Þ¸ÂVgvýWC»ï}ºTÒq·uj{[Ì®Bôb´(ΛC^à2‘¶¢‘|‚æõd¾NOZ�q�ɺ¾¿sZ®r¬úŽöÜ/-ãgÄÐÛ%H�«cAâæñ�ñŸn¾xò[üÇ_áó…ÖïÝå›Óó‹ê> �•ñßžn×ÿÙÖÓ'¿Åÿø>—ñ˜˜ÐJìoÇt`¤Éñ'Î:“hö²vv�‚W#�C‰iï�F4Ë,èeí"ê¯Ópò!š\Ï©Dõþ8´¿¥ñ¸z�FÖÕ~ûרÿ!*¶ô6Lû`uçÙ_?ÄÑmÜÿ+�ˆŸQIâ‡æ$üõemÿ&¥Sð8L3:g!·_»TlëÝ(…êëxÞÿ@”øÛÿýãxž%ÃYgQgq|ùq8ÇxÆüë�߇â#.pNõAÈÏæé Ž‚oÓ)ùc:%)P`£ÓºèßÌÓø:øö†gòó�×ãOÜÐ?z�ïø|¡ý¯‘úªûX½ÿŸ>ÙÚ|RÞÿÛ¿Åÿù5>ÿú¯àM¾;y|wxrx¾wœ½{u|´htÏš Ï÷&Øa›ö西ß"ÎRºx"Ábë÷_ÿ¾Í¯
flÁ BL#ÚµàÙ–PŽíú‹•&Qîu<$¦õõ(IÒvð*Éf(ÿv/ØÜÞÚÚ\ßz²¹¼»Ø«‡£t¡öS˜xÍf.dž�tF�ÌAzÔõ/c˜ý×>�eiCó´Y„àK#S33Wèìþá–ÀÁð8K£pÜE`í.ÙP_£b9F†ûKcàáÆ’°v·á‚ãÿÔ†4ñA2–¨Æ Dîh � xµà+¥”D1UãÅb_N’ÿæ=ê:p™±à3HW×ó� <‹" 5´ª+¼«™1¯¯S‘\,�ð|OŠëp:â™8+g±t©ùCÌÐ8Þž\b0|Tpð°¤–c ¢…¸&2òl´N£
¿åpŸá|v“¤ß6AÄJjróÆÐk^$c•¨—b¤79�öô5ìcˆ |