https://openlunchbox.com/mw19/index.php/HOWTO:_Gentoo_for_LinuxCNC
The documentation below is being kept for historical purposes only.
GentooPreemtrt is also outdated.
This page describe how to compile and install EMC2 on Gentoo using portage. This howto is targeted for experienced Linux user. User are expected to atleast be able to compile a kernel without much difficulty. For others, please see Installing EMC2.
Note: The provided ebuilds here is created with minimal efforts. It's only tested on x86 and with default package USE flags. Some dependencies might be missing, please update this page if you found any.
|
mkdir /usr/local/portage
Then, add overlay to /etc/make.conf
PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/local/portage"
Next, create folder for EMC2 and RTAI ebuilds
mkdir /usr/local/portage/sys-kernel/rtai-sources mkdir /usr/local/portage/sci-misc/rtai mkdir /usr/local/portage/sci-misc/emc
Save the following content to /usr/local/portage/sys-kernel/rtai-sources/rtai-sources-2.6.34.5-r4.ebuild
EAPI="2" K_SECURITY_UNSUPPORTED="1" K_DEBLOB_AVAILABLE="1" ETYPE="sources" inherit kernel-2 detect_version DESCRIPTION="Linux kernel with RTAI extension" HOMEPAGE="http://www.kernel.org https://www.rtai.org" SRC_URI="${KERNEL_URI}" MY_PV="2.7-04" UNIPATCH_LIST="${FILESDIR}/hal-linux-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}.${KV_EXTRA}-x86-${MY_PV}.patch" KEYWORDS="" IUSE="deblob" |
Next, download RTAI kernel patches from RTAI CVS [1], and save it under /usr/local/portage/sys-kernel/rtai-sources/files
Then, create manifest files for rtai-sources ebuild.
ebuild /usr/local/portage/sys-kernel/rtai-sources/rtai-sources-2.6.34.5-r4.ebuild manifest
sys-kernel/rtai-sources **
Then, install the rtai kernel source
emerge -av rtai-sources
Select RTAI kernel as default then build the kernel with genkernel or make menuconfig
eselect kernel list (this will show RTAI kernel index number> eselect kernel set <RTAI kernel index number> genkernel --menuconfig all
Update grub to point to new rtai kernel image
For example, if the patches is named hal-linux-2.6.35.7-x86-2.7-04.patch:
Finally, you'll need to update manifest for the new ebuild.
ebuild /usr/local/portage/sys-kernel/rtai-sources/rtai-sources-2.6.36.7-r1.ebuild manifest
Then follow the Installing RTAI kernel Finally, rebuild all related modules with module-rebuild (Install with "emerge -av module-rebuild" if you haven't install it)
module-rebuild rebuildThat will rebuild RTAI and EMC2 modules to match with new kernel
EAPI="3" PYTHON_DEPEND="2" inherit linux-mod python cvs flag-o-matic DESCRIPTION="Real Time Application Interface for Linux" HOMEPAGE="https://www.rtai.org/" ECVS_SERVER="cvs.gna.org:/cvs/rtai" ECVS_MODULE="magma" ECVS_BRANCH="HEAD" ECVS_AUTH="pserver" ECVS_USERNAME="anonymous" LICENSE="GPL-2" SLOT="0" KEYWORDS="" IUSE="debug +fpu +testsuite doc compat +static-inline extern-inline +diag-tsc-sync +master-tsc-cpu +tune-tsc-sync sched-lock-isr +rtc-freq long-timed-lists +sched-8254-latency +sched-apic-latency +sched-lxrt-numslots +lxrt-use-linux-syscall align-priority +cal-freq-fact +bits +fifos +netrpc netrpc-rtnet +shm +sem rt-poll rt-poll-on-stack +msg +mbx +tbx +tasklets +mq +math math-c99 +malloc malloc-tlsf +malloc-vmalloc +malloc-heap-size +kstack-heap-size task-switch-signal trace +usi +watchdog leds comedi-lxrt comedi-lock cplusplus +rtdm +rtdm-fd-max +rtdm-shirq +rtdm-select +serial +16550a rtailab ktasks-sched-lxrt" RDEPEND="sys-kernel/rtai-sources " DEPEND="${RDEPEND} " S="${WORKDIR}/magma" src_unpack() { cvs_src_unpack } src_configure () { econf \ --with-module-dir="/lib/modules/${KV_FULL}/rtai" \ --enable-cpus=3 \ --prefix="/usr/realtime" \ $(use_enable fpu) \ $(use_enable testsuite) \ $(use_enable doc dox-doc) \ $(use_enable doc latex-doc) \ $(use_enable doc verbose-latex) \ $(use_enable doc dbx) \ $(use_enable compat) \ $(use static-inline && echo --with-lxrt-inline=static) \ $(use extern-inline && echo --with-lxrt-inline=extern) \ $(use_enable diag-tsc-sync) \ $(use_enable master-tsc-cpu master-tsc-cpu 0) \ $(use_enable tune-tsc-sync) \ $(use_enable sched-lock-isr) \ $(use_enable rtc-freq rtc-freq 0) \ $(use_enable long-timed-lists) \ $(use_enable sched-8254-latency sched-8254-latency 4700) \ $(use_enable sched-apic-latency sched-apic-latency 3944) \ $(use_enable sched-lxrt-numslots sched-lxrt-numslots 150) \ $(use_enable lxrt-use-linux-syscall) \ $(use_enable align-priority) \ $(use_enable cal-freq-fact cal-freq-fact 0) \ $(use_enable bits bits m) \ $(use_enable fifos fifos m) \ $(use_enable netrpc netrpc m) \ $(use_enable netrpc-rtnet netrpc-rtnet m) \ $(use_enable shm shm m) \ $(use_enable sem sem m) \ $(use_enable rt-poll rt-poll m) \ $(use_enable rt-poll-on-stack rt-poll-on-stack m) \ $(use_enable msg msg m) \ $(use_enable mbx mbx m) \ $(use_enable tbx tbx m) \ $(use_enable tasklets tasklets m) \ $(use_enable mq mq m) \ $(use_enable math math m) \ $(use_enable math-c99 math-c99 m) \ $(use_enable malloc) \ $(use_enable malloc-tlsf) \ $(use_enable malloc-vmalloc) \ $(use_enable malloc-heap-size malloc-heap-size 2048) \ $(use_enable kstack-heap-size kstack-heap-size 512) \ $(use_enable task-switch-signal) \ $(use_enable trace) \ $(use_enable usi usi m) \ $(use_enable watchdog watchdog m) \ $(use_enable leds leds m) \ $(use_enable comedi-lxrt comedi-lxrt m) \ $(use_enable comedi-lock comde-lock m) \ $(use_enable cplusplus cplusplus m) \ $(use_enable rtdm) \ $(use_enable rtdm-fd-max rtdm-fd-max 128) \ $(use_enable rtdm-shirq) \ $(use_enable rtdm-select) \ $(use_enable debug enable-debug-rtdm) \ $(use_enable serial) \ $(use_enable 16550a) \ $(use 16550a && echo --with-16550a-ham=any) \ $(use_enable rtailab) \ $(use_enable debug module-debug) \ $(use_enable debug user-debug) \ $(use_enable ktasks-sched-lxrt) # remove invalid file delete find . -name 'GNUmakefile' -type f -print0 | xargs -0 sed -i 's:rm -f /usr/src/linux/.tmp_versions/rtai_\*.mod /usr/src/linux/.tmp_versions/\*_rt.mod;::g' } src_install () { emake DESTDIR="${D}" install || die "install failed" rm "${D}/usr/realtime/include/asm" mv "${D}/usr/realtime/include/asm-i386" "${D}/usr/realtime/include/asm" || die "rename failed" dodoc README.* ChangeLog || die } |
--enable-cpus=3With the same amount of cpu core you have (in above case, it's 3 core CPU).
As usual, create the manifest for the new ebuild.
ebuild /usr/local/portage/sci-misc/rtai/rtai-9999.ebuild manifest
Note: In theory, this ebuild will allow user to enable or disable any RTAI modules based on USE flag. But in practice, it's never tested so it might not work with certain USE flags combination.
sci-misc/rtai **
Since the rtai will get installed automatically by EMC2 dependencies, we'll skip manual install and go to EMC2 installation.
ECVS_REVISION=1000 emerge -1 rtai (this will build rtai at commit 1000)
EAPI="3" PYTHON_DEPEND="2" inherit linux-mod autotools python git flag-o-matic DESCRIPTION="G-Code interpreter for Linux based CNC" HOMEPAGE="http://www.linuxcnc.org/" EGIT_REPO_URI="git://git.linuxcnc.org/git/emc2.git" LICENSE="GPL-2" SLOT="0" KEYWORDS="" IUSE="+X +gtk nls +python +doc-pdf doc-html simulator" RDEPEND=" x11-libs/gtk+ x11-libs/fltk dev-lang/nasm dev-lang/tcl dev-lang/tk dev-lang/python dev-python/numpy dev-python/imaging dev-python/pygtk dev-python/pyxml dev-tcltk/bwidget dev-tcltk/tkimg !simulator? ( sci-misc/rtai ) X? ( x11-libs/libXinerama x11-libs/libXmu x11-libs/libXaw x11-libs/libICE )" DEPEND="${RDEPEND} " src_unpack() { git_src_unpack } src_configure () { cd src eautoreconf econf \ --with-module-dir="/lib/modules/${KV_FULL}/rtai/" \ $(use_enable doc-pdf build-documentation build-documentation pdf) \ $(use_enable doc-html build-documentation build-documentation html) \ $(use_enable nls) \ $(use_enable gtk) \ $(use_enable python) \ $(use_enable simulator) \ $(use_with X x) # remove invalid ldconfig call sed -i -e 's:-ldconfig $(DESTDIR)$(libdir)::g' Makefile # replace pci_find_device to pci_get_device find . -type f -print0 | xargs -0 sed -i 's:pci_find_device:pci_get_device:g' } src_install () { cd src emake || die "compile failed" emake DESTDIR="${D}" localedir="/usr/share/locale/" install || die "install failed" } |
Create the manifest.
ebuild /usr/local/portage/sci-misc/emc/emc-9999.ebuild manifest
emerge -av gnome
To install EMC2, unmask the ebuild first. Edit /etc/portage/package.keywords and add the following line:
sci-misc/emc **
Next, if you previously installed rtai manually these files should be removed.
Next, install EMC2
emerge -av emcRTAI library will automatically installed as a dependecies.
To enable simulation only, set USE flag to simulator. This will skip RTAI kernel and library installation. Edit /etc/portage/package.use, add new line
sci-misc/emc simulator
EGIT_COMMIT=db9bfd3653de23693db67ec5a0534e4d4ac97f7d emerge -1 emc (this will build emc at commit db9bfd3653de23693db67ec5a0534e4d4ac97f7d)There's also EGIT_BRANCH variable if user want to switch to another git branch