for my current project I want to reduce the power consumption of the Intel Edison and speed the boot process. My device will be powered by battery and needs therefore lowest power settings possible.
Here is what I do: I want to monitor the UART and I2C connections and send measured data from there to a remote host by using the WiFi of the Edison. Therefore I only need the UART,I2C,WiFi (and underlaying network) layers for the flashed Linux Yocto to get the job done. Things like Pulseaudio, Bluetooth or else are not needed and should be shut off during runtime. Is there any way to do so? I found a way to power down these connections when linux is booted via the method described in https://ubuntuforums.org/showthread.php?t=2326395 https://ubuntuforums.org/showthread.php?t=2326395 Because I want to use the configured Linux for many devices it would be nice if I can disable unused connections from default. Is there any way to?
Another problem I've got is the startup time for the Edison. When monitoring the console output via TeraTerm I see the usual Linux Bootloading process by using U-Boot. This process takes quite some time and it would be very nice for the user to get the boot process as fast as possible done. Is there any way to get the system faster within the boot process (e.g. custom Linux build, custom Kernel or else and way more important: where to start!)? If I observe some services by systemctl after booting most are loaded but inactive (and slow down the boot process I guess).
In general I want to use a single-user system with I2C, UART and WiFi. There is no need for any extra functions or else (unless some packages require specific ones).
I'm quite familiar with Linux Ubuntu and Debian but never built a custom kernel or edited the bootloader. Are there any places to get a start for a dummie like me ?
Thanks a lot
Thank you for your interest in Intel® Edison Breakout Board.
If you are interested in building and customizing images and kernels, the best way to start is checking the Intel® Edison Board Support Package ( https://software.intel.com/en-us/node/593589, http://www.intel.com/content/www/us/en/support/boards-and-kits/000005616.html).
Please let me know if you find the previous information useful.
thanks for the answer! I'll find my way through the docs and post the result here (if I get anything running). Currently my plan is to load the kernel and afterwards a BusyBox in the initramfs which shut off all unused peripherals and then starts my static linked program e.g. by a script. Could that speed up the process in general?
If there are any other suggestions (maybe my thoughts are complete wrong) that might help I would be happy
Keeping you updated
I've gone through the documents and my kernel is currently compiling. Nevertheless I could not figure out how to disable the peripherals by default. It would be nice if I can get a BusyBox running when the kernel loads the initramfs. I don't need the changeroot process and would like to stay in the initramfs (I want to get my program into that). Is there any way how to do it?
SpiderKenny's post is quite interesting, are there any important discussions in the past which have not made their way into the tutorial?
All the best
Thank you all for the help, I really appreciate it! Now I used the webproject
But nevertheless I've got some problems compiling my kernel again
After applying the patch from http://git.yoctoproject.org/cgit/cgit.cgi/meta-java/commit/recipes-core/icedtea/openjdk-7-03b147/sig... meta-java - Layer containing recipes for OpenJDK and other open source Java-related components into my building directory the build does not stop at the icedtea-stage but later:
ERROR: Task 1484 (/home/thomas/Edison/iot-devkit-yp-poky-edison-20160606/build_edison/../poky/meta-intel-iot-devkit/recipes-extended/libmodbus/libmodbus_3.1.2.bb, do_compile) failed with exit code '1'
Even if I retry to compile the error occurs again. Does someone got similar problems or depends the build on the machine I'm using (like post # 23 from )?
*** EDIT ***
I'm using a Ubuntu 14.04 LTS
Ok, I found a really nice solution! So to make sure everything is well documented I will write my steps down.
First of all remove the Intel provided documents listed above for a custom compile. In this case you have to deal with the forum and hope for the help of others. But I made good experiences and could achieve a faster boot. FYI I use a Ubuntu 14.04 LTS on a MacBook Pro
Linux ThomasLinux 4.4.0-72-generic # 93~14.04.1-Ubuntu SMP Fri Mar 31 15:05:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
The wiki page on https://edison.internet-share.com/wiki/Using_a_vanilla_Linux_kernel_with_Intel_Edison https://edison.internet-share.com/wiki/Using_a_vanilla_Linux_kernel_with_Intel_Edison provides almost every information needed for the build. Just follow the steps from that page and build your own Vanilla Linux Kernel and the buildroot as initramfs which provides you a simple busybox clone (or something similar). To test everything you can use the virtual machine manager https://wiki.ubuntuusers.de/virt-manager/ https://wiki.ubuntuusers.de/virt-manager/ just use the generated bzImage as kernel and rootfs.cpio.bz2 for the initrd. Your machine should boot and you can login as 'root'
Intel's U-Boot (2014.04 or so) is quite old for the faster boot procedure and let me run into a kernel panic or even worse. To be honest I don't really know why and my succeed is a result of try&error. You should update your U-Boot to a newer version of that. Be sure to check out this thread:0andriy. You should take a look at his u-boot repo by using the following command in the cloned git:
$ git checkout edison
$ make edison_defconfig
Because I had problems like http://www.developersite.org/102-16301-gcc Gccv5.4 undefined reference to `__normal___udivdi3' I had to install some more packages onto my machine. After some time and by using aptitude I was able to install the multilib packages which are required to build the u-boot. I had some packages from the gcc-4.8-base updated by Ubuntu to 4.8.3 (or so) but the gcc multilib package's dependency was on a prior version. So I had to downgrade some packages. Later I was able to build the U-Boot in the newest release. The method from PieterGit Jan 9, 2017 6:36 AM didn't work on my Ubuntu.
After everything was built and the U-Boot was updated to 2017.X I could transfer the data onto the Edison and continue with the procedure from https://edison.internet-share.com/wiki/Using_a_vanilla_Linux_kernel_with_Intel_Edison# U-Boot https://edison.internet-share.com/wiki/Using_a_vanilla_Linux_kernel_with_Intel_Edison# U-Boot. And I booted my own compiled kernel and initrd files. Success.
After starting the process by hitting 'run bootcmd_edsboot' from the U-Boot I was able to get a boot time from approx 7-8 secs. All in all I would guess around 11 secs to login could be possible.
But I haven't tried to use WiFi in this build so the story continues...
PS: From time to time I plugged the edison into a Win7 machine and the OS said that I had to format the disk to use it. I clicked on yes and my whole system went nuts. Somehow later I used a procedure described in http://jamiei.com/blog/2015/01/starting-with-the-edison/ Starting with the Edison Part 1 – Setup – Jamie's Blog and was able to recover my edison. On the Ubuntu there was an error about a 'superblock' on sdc1. This was try&error too to get the disk back running.
I got some errors which do not allow me to build the edison-image recipe. Instead the core-image-minimal recipe is compiling well. When I do as described in https://software.intel.com/en-us/node/593591 IoT - Build an Intel® Edison Board Image Using Bitbake | Intel® Software I will run into some errors:
1. Fetcher failure for URL: [...] Checksum mismatch!
2. Function failed: Fetcher failure for URL: ' http://icedtea.classpath.org/hg/release/icedtea7-forest-2.1/archive/f89009ada191.tar.bz2;name=openjd...' Unable to fetch URL from any source
3. as 2. mentioned the fetch from icedtea7-native_2.1.3.bb failed with exit code 1
Otherwise if I compile the core-image-minimal method everything seems fine and I can boot the process with runqemu qemux86. But that does not work on the edison itself I guess.
What more information do you need to see what I'm doing wrong?