KernelDriverProgrammingCourse2015/Troubleshooting

From RevSpace
Jump to navigation Jump to search

Troubleshooting

Mint Preparations

Install an ARM cross-compiler (to prevent the error shown below):

 apt-get install gcc-arm-linux-gnueabi-
  • While compiling the kernel under Mint you can get a beautiful error - "Your compiler is too buggy":
 $ make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
 CHK     include/config/kernel.release
 CHK     include/generated/uapi/linux/version.h
 CHK     include/generated/utsrelease.h
 make[1]: `include/generated/mach-types.h' is up to date.
 CHK     include/generated/timeconst.h
 CHK     include/generated/bounds.h
 CC      arch/arm/kernel/asm-offsets.s
 arch/arm/kernel/asm-offsets.c:54:2: error: #error Your compiler is too buggy; it is known to miscompile kernels
 #error Your compiler is too buggy; it is known to miscompile kernels
  ^
 arch/arm/kernel/asm-offsets.c:55:2: error: #error and result in filesystem corruption and oopses.
 #error and result in filesystem corruption and oopses.
  ^
 make[1]: *** [arch/arm/kernel/asm-offsets.s] Error 1
 make: *** [prepare0] Error 2

Back to KernelDriverProgrammingCourse2015


Preparations on Debian Stretch

(luteijn: for now only raw dump of my own note to Hans and myself - feel free to wikify this more properly) Hi Hans, Zo, dat was even een gedoe om die voorbereiding voor elkaar te krijgen, op zich al weer heel leerzaam, heb wel al vaker dingen gecrosscompileerd voor Arm maar was al weer wat jaren geleden en met een andere toolchain... Bij dezen even een kort verslag van mijn ervaringen om a) dit ook voor mezelf te documenteren, b) aan te geven dat er tenminste iemand is die jouw mailtje gelezen heeft en niet helemaal met lege handen de 26e op komt dagen ('Heh, wat, moest ik een laptop meenemen dan?'), c) wellicht klopt er niks van wat ik gedaan heb, dan hoor ik dat natuurlijk graag, d) misschien is er iemand anders vastgelopen die niet zo eigenwijs is om gewoon zelf door te modderen en helpt dit jou die persoon weer verder te helpen?


Allereerst, mijn laptopje draait Debian Stretch.

   1) Make sure you've at least 10 GigaByte of free space in your homedir

Check.

   2) Install git (yum install git / apt-get install git)

Check, maar bleek later ook 'git-email' te moeten apt-getten want anders werkt git send-email dus niet.

   3) Clone the u-boot and linux-kernel sources from git, since we will be


Check. duurde lang, maar ben lekker wat anders gaan doen, en was op een gegeven moment klaar. checkouts uit ander mailtje toen gedaan.

   4) Install an ARM cross-compiler, see: http://linux-sunxi.org/Toolchain
   Note it is best to use distro packages where possible.


Hier werd het tricky, want uitleg alleen voor jessie en unstable, en deze beide methoden leken niet te werken voor stretch. Methode met unstable chroot dus maar geprobeerd, maar dat werkte dus OOK niet. "unable to locate package crossbuild-essential-armel" Uiteindelijk na nog wat experimenten dan uiteindelijk maar een chroot 'jessie' gemaakt en daarbinnen de jessie instructies gevolgd, en uiteindelijk de crosscompiler geinstalleerd. Voorbeeld was voor armhf, maar dat werkte verderop dan weer niet lekker, dus die weer armhf spullen weer weggemikt en armel geinstalleerd. Wellicht ook niet wat het zou moeten zijn, maar leek verder wel te werken. 'debootstrap jessie jessie' levert een vrij kale omgeving op, dus nog even wat dingen opnieuw moeten apt-getten binnen de chroot, en natuurlijk een user adden en die linux en u-boot directories in de chroot zetten.

Stappen 5,6 en 7 dus gedaan vanuit de chrooted omgeving.

   5) Figure out your cross-compiler prefix, do: "ls /usr/bin/arm-linux*-gcc"


PREFIX=arm-linux-gnueabi- en dan verder overal braaf $PREFIX invullen waar jij arm-linux-gnu- had staan. Misschien in verder voorbeelden/voorbereiding ook $PREFIX o.i.d. gebruiken? Of had ik toch een andere crosscompiler moeten hebben?

   6) Do a u-boot test-build:

Check, na wat valse starts met armhf uiteindeljik met armel voor elkaar gekregen. Moest wel apt-get install device-tree-compiler doen.

   7) Do a kernel devicetree binary (dtb) test build:

Hmm, dit ging niet helemaal goed: site was kennelijk net even te druk of in onderhoud toen ik die kernel-config wou wgetten, kreeg:

 luteijn@atcaret:~/devel/kerneldriver/linux$ wget https://fedorapeople.org/~jwrdegoede/kernel-driver-programming/kernel-config
 converted 'https://fedorapeople.org/~jwrdegoede/kernel-driver-programming/kernel-config' (ANSI_X3.4-1968) -> 'https://fedorapeople.org/~jwrdegoede/kernel-driver-programming/kernel-config' (UTF-8)

--2015-07-08 21:40:26-- https://fedorapeople.org/~jwrdegoede/kernel-driver-programming/kernel-config

 Resolving fedorapeople.org (fedorapeople.org)... 152.19.134.191, 2610:28:3090:3001:5054:ff:fedb:7f5a
 Connecting to fedorapeople.org (fedorapeople.org)|152.19.134.191|:443... failed: Connection refused.
 Connecting to fedorapeople.org (fedorapeople.org)|2610:28:3090:3001:5054:ff:fedb:7f5a|:443... failed: Network is unreachable.

Met gewone browser naar http:fedorapeople.org gaan leverde wel redirect op naar https:// maar dan inderdaad ook connection refused. Nu ik dit schrijf en de exacte error erbij wil pakken, doet het het weer wel, dus ik heb die kernel-config nu wel en de bovenstaande error uit mijn scrollback buffer gevist.

Oorspronkelijk heb ik maar gewoon zelf een config gemaakt met $PREFIX in de CROSS_COMPILE en dan allemaal defautls erin ge-enterd om in ieder geval iets te kunnen testen, en dat leek uiteindelijk door te lopen, met wel een vage error op 'empty.o'. Check voor zekere waarden van Check.

Nu net nog een keer een make mrproper en daarna cp kernel-config .config (niet mv, wil het nog ene keer kunen doen ook als die website er weer uitligt ;) )

 make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- oldconfig

Toch nog een aantal 'NEW' config vragen, dus maar gewoon weer de enter key vastgehouden voor de defaults.

 make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs

En dit liep nu helemaal door zonder vage errors.


   8) Configure git so that you can send out patches, edit ~/.gitconfig

Check, moest dus wel zoals reeds vermeld git-send-email apt-getten, maar verder volgens het boekje, dummy regel in Makefile gezet; me verbaasd dat $EDITOR kennelijk niet op vi stond, want kreeg pico of nano ofzo voor mijn neus. Gelukkig geen al te heftige flashbacks naar mijn studententijd en emailen met pine gehad.

   9) All done, see you Sunday the 26th!

Tot dan!

Gr., Pieter.


Back to KernelDriverProgrammingCourse2015