Some observations on https://wiki.onion.io/Tutorials/Cross-Compile
Since I want to make some changes/additions to what I run on my Omega, I have been exploring the use of cross compilation of the system following the instructions covered in https://wiki.onion.io/Tutorials/Cross-Compile
My explorations have been largely successful, but some related observations may be helpful.
I have successfully done the following:
- Built various packages and installed them on my Omega by copying the .ipk file(s) from ~/openwrt/bin directories and installed them using opkg (though see further notes below)
- Built the whole system and installed it using sysupgrade openwrt-ar71xx-generic-onion-omega-squashfs-factory.bin as covered in Step 7: Flash Image in https://wiki.onion.io/Tutorials/Cross-Compile (though see further notes below)
- Built the toolchain and SDK and tested them
However, there are some issues that are worth drawing attention to.
With respect to the various packages:
- For each package you need over the very basic ones (i.e. pretty well all of the various Omega packages) you need to do the following for each since they are not provided by default:
- scripts/feeds install <package-name>
- Run make menuconfig and select the package and save
- Either run a full make or make the specific package using make package/<package-name>/install for each package
- It is not clear just what packages you need to duplicate the standard Omega setup
- Some packages that you may think you might want won't actually build - doing so gives you an error - e.g. I was unable to build gpioutil
With reference to installing and using openwrt-ar71xx-generic-onion-omega-squashfs-factory.bin - while this works, it is NOT the standard Omega system:
- When one (finally -see next point) connects to it, it shows as Chaos Chalmer - not Onion Omega
- Wifi access is not available by default - it was only initially possible to connect via serial communications. Wifi can be made available by suitably editing /etc/config/wireless
- The standard packages normally available on the Omega were not available (see earlier comments under packages)
- To get back to a standard Omega setup it was necessary to:
- Copy (e.g.) a file such as omega-v0.0.5-b259.bin from http://repo.onion.io/omega/images/ to /tmp
- Then on the Omega run sysupgrade omega-v0.0.5-b259.bin
A final comment/question in relation to use of make menuconfig:
- When selecting a package for inclusion it can be marked as included (<*>) or modularized (<M>) - I am unclear as to the significance/difference of these and when they should be used - can someone clarify this?
As a final suggestion I think it would be good if there was a repository for the current Omega system setup (as installed in the Omega) that could be used instead of git://git.openwrt.org/15.05/openwrt.git - this should basically provide exactly the same as is used to built the latest omega-v0.0.5-bNNN.bin as in http://repo.onion.io/omega/images/ including all customisations, packages etc.
This guide covers a lot of general OpenWRT build process not covered by the onion wiki and I've found it helpful. In particular, setting the target and then running make defconfig was helpful to me.
For a list of installed packages, I extracted the list from the official build from /usr/lib/opkg/status on the Omega (It can also be extracted by using binwalk -e with unsquashfs on a local machine)
Then finding the appropriate packages in make menuconfig by searching for PACKAGE_packagename eg: PACKAGE_oupgrade.
I could not build the arduino-dock (the repository isnt public yet?) or the onion-repo-keys (I need to generate my own keys). I required additional [host] packages to build some of the other packages (including something perl xml)
With make meunconfig, using <*> installs the package into the image. Using <M> builds the package but does not install it into the image.
I still seem to be missing some files. A lot of them are generated from /rom/etc/uci-defaults (just /etc/uci-defaults in the image before first run if inspecting using binwalk), but some such as /etc/uci-defaults/14_banner are not (this file may not be provided by a package yet)
Here is the config differences I used as generated by ./scripts/diffconfig.sh
I've generated a list of missing files by comparing the image built from the above config to the official onion omega image.
List of missing files (there may be other modified files too):
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/bin: login
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/avahi/services: arduino.service
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/config: network
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/config: onion
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/config: wireless
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/modules.d: 58-i2c-gpio-custom
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/opkg/keys: 72954c8812ca3803
Only in _openwrt-ar71xx-generic-onion-omega-squashfs-factory.bin.extracted/squashfs-root/etc/opkg/keys: ac6cd5a9c1031faa
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/opkg/keys: c3fab49346f69eff
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc: profile.orig
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc: sysupgrade.conf.orig
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/uci-defaults: 12_onion_version
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/uci-defaults: 13_hostname
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/uci-defaults: 14_banner
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/etc/uci-defaults: 98_opkg
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/sbin: fdisk
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/bin: arduino-dock
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/bin: lsusb
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/bin: merge-sketch-with-bootloader.lua
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/bin: resize
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/bin: run-avrdude
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/bin: twidude
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/lib/opkg/info: arduino-dock.control
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/lib/opkg/info: arduino-dock.list
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/lib/opkg/info: onion-repo-keys.control
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/lib/opkg/info: onion-repo-keys.list
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/sbin: chpasswd
Only in _omega-v0.0.5-b251.bin.extracted/squashfs-root/usr/share: arduino-dock
@alzeih Thanks for your various notes - they are helpful
Hi @Kit-Bishop, thanks for the suggestions. we are working on a way for you guys to generate an Omega specific image easier and faster. Please stay tuned for that.
In terms of the difference between
<*>marks the package to be included in the final
.binfile where as
<M>merely compiles the
.ipkfile for the package. (Selecting
<*>will also compile the
.ipkfile. So if you want to compile a package that you plan on uninstalling, you should set it to
<M>. When the package is built into the image, it cannot be truly uninstalled. The file deletion only happens in the
/overlaypartition, but in reality, it still takes up space on the
/rompartition. Whereas if it is installed as an
.ipk, it can be fully removed.
I hope this answers your question.
@Boken-Lin Thanks - that information clarifies things. Thanks :-)
Look forward to future developments in relation to generating Omega specific images - it would be a good thing - mainly to make life simpler.
however, i am now successfully building packages for the Omega which I can install using opkg so am currently happy with what we have :-)