Dear ALL, I'm going to use CUPS on the board. I tried to build different versions of CUPS (1.3.11 1.4.6 and 1.5.x). All of them were built successfully, however the only 1.3.11 could be started successfully on the board. The other version crash with Segmentation fault or Illegal instruction message. After couple of hours digging the sources I got rid of Segmentation fault by using static linking of CUPS (--enable-static --disable-shared --disable-default-shared). Currently I experience problems with Illegal instruction (v1.4.6 and v1.5), inspecting the core dump provides: Core was generated by `/usr/local/sbin/cupsd -f'. Program terminated with signal 4, Illegal instruction. #0 0x2a0b8908 in __aeabi_dadd () (gdb) quit I imagine this is related to some CPU related options during compilation... On CUPS forum I saw the message saying that CUPS is not designed for cross-compiling ... v1.3.11 seems to be working but so far I couldn't print a page using it. Anyway I would like to use newer version and my preference is 1.4.6. compiler: arm-none-linux-gnueabi flags used: -march=armv4t -msoft-float -mtune=arm920t -mcpu=arm920t If someone has experience of porting CUPS to ARM board please share your knowledge.
CUPS on mini2440
Hi Artem, You can use buildroot to build CUPS. It is the way I made CUPS work with my micro 2440 board. I have no experience about cross compiling cups directly. Regards
Hi bao, Could you please tell me the version of CUPS you used. I will try this. Also please tell whether you could configure the CUPS and it can detect printers connected to the board? Currently I have compiled CUPS 1.3.11 and I could run it. However there is a problem right now with printer detection. I was digging the log files and found some mysteries :-)) I imagine that something is wrong with the build process ...
Hi Artem, I am using CUPS 1.3.9. In order to get CUPS detect your printer, you must have the printer driver (usblp) in your kernel. Make sure that you can see your printer in /dev/usb/lp0 I don't know about CUPS 1.3.11, but if you use CUPS 1.4.5 or 1.4.6, you have to remove the usblp driver, because CUPS 1.4.x use libusb to detect the printer. In my case, after installing CUPS to the target file system, I have to copy the file us-ascii.txt to /usr/share/cups/charmap (attached). Otherwise, CUPS print out nothing. You can use the usb backend to detect your printer without this charmap file. /usr/lib/cups/backend/usb or you can use cups server: /etc/init.d.cups restart lpinfo -l -v Hope that help Regards PS: Can you share the mystery :D BAO
Many thanks for the information. Actually I'm using /usr/lib/cups/backend/usb but have some problems.. During detection procedure in the log files CUPS says that it has no permission to access some files however I'm running it under root and I'm sure I have no problem with file permissions. Anyway I will keep digging the problem.
It looks strange. Try change the cupsd.conf from "info" to "debug". It can provide you more information. Are you using the pre-installed linux with Qtopia? Do you have /dev/usb/lp0 when you plug in your printer? Did you use any patch before cross-compile? As far as I know, CUPS can not cross-compile out of the box.
@Artem and Bao: Even I cross compilled and made Cups 1.3.11 for my mini2440, Now how do I transfer it to the mini2440 system? T make it run.
K, I got CUPS on my mini2440, but whenever I start /etc/init.d/cups start i get: ps: invalid option -- 'a' BusyBox v1.13.3 (2010-07-24 19:11:35 CST) multi-call binary Usage: ps Report process status Options: w Wide output cups: unable to start scheduler. can anyone please suggest something?
Busybox's 'ps' command is not the same than the regular 'ps' command. Just modify the '/etc/init.d/cups' script not using the 'a' param. Or install the regular 'ps' command on your target instead.
I'm sorry I'm kinda new to this :( I'm posting my /etc/init.d/cups here, can you point out the change? #!/bin/sh # # "$Id: cups.sh.in 6649 2007-07-11 21:46:42Z mike $" # # Startup/shutdown script for the Common UNIX Printing System (CUPS). # # Copyright 2007 by Apple Inc. # Copyright 1997-2007 by Easy Software Products, all rights reserved. # # These coded instructions, statements, and computer programs are the # property of Apple Inc. and are protected by Federal copyright # law. Distribution and use rights are outlined in the file "LICENSE.txt" # which should have been included with this file. If this file is # file is missing or damaged, see the license at "http://www.cups.org/". # #### OS-Dependent Information # # Linux chkconfig stuff: # # chkconfig: 235 99 00 # description: Startup/shutdown script for the Common UNIX \ # Printing System (CUPS). # # # NetBSD 1.5+ rcorder script lines. The format of the following two # lines is very strict -- please don't add additional spaces! # # PROVIDE: cups # REQUIRE: DAEMON # #### OS-Dependent Configuration case "`uname`" in IRIX*) IS_ON=/sbin/chkconfig if $IS_ON verbose; then ECHO=echo else ECHO=: fi ECHO_OK=: ECHO_ERROR=: ;; *BSD*) IS_ON=: ECHO=echo ECHO_OK=: ECHO_ERROR=: ;; Darwin*) . /etc/rc.common if test "${CUPS:=-YES-}" = "-NO-"; then exit 0 fi IS_ON=: ECHO=ConsoleMessage ECHO_OK=: ECHO_ERROR=: ;; Linux*) IS_ON=/bin/true if test -f /etc/init.d/functions; then . /etc/init.d/functions ECHO=echo ECHO_OK="echo_success" ECHO_ERROR="echo_failure" else ECHO=echo ECHO_OK=: ECHO_ERROR=: fi ;; *) IS_ON=/bin/true ECHO=echo ECHO_OK=: ECHO_ERROR=: ;; esac #### OS-Independent Stuff # # Set the timezone, if possible... This allows the scheduler and # all child processes to know the local timezone when reporting # dates and times to the user. If no timezone information is # found, then Greenwich Mean Time (GMT) will probably be used. # for file in /etc/TIMEZONE /etc/rc.config /etc/sysconfig/clock; do if test -f $file; then . $file fi done if test "x$ZONE" != x; then TZ="$ZONE" fi if test "x$TIMEZONE" != x; then TZ="$TIMEZONE" fi if test "x$TZ" != x; then export TZ fi # # Don't use TMPDIR environment variable from init script, as that can # cause cupsd to set TempDir to a user's temporary directory instead # of the default... # unset TMPDIR # # Make sure we have the standard program directories in the path # since some operating systems (this means YOU HP-UX!) don't # provide a standard path on boot-up... # if test "x$PATH" = x; then PATH="/bin:/usr/bin:/sbin:/usr/sbin" else PATH="/bin:/usr/bin:/sbin:/usr/sbin:$PATH" fi export PATH # # See if the CUPS server (cupsd) is running... # case "`uname`" in HP-UX* | AIX* | SINIX*) pid=`ps -e | awk '{if (match($4, ".*/cupsd$") || $4 == "cupsd") print $1}'` ;; IRIX* | SunOS*) pid=`ps -e | nawk '{if (match($4, ".*/cupsd$") || $4 == "cupsd") print $1}'` ;; UnixWare*) pid=`ps -e | awk '{if (match($6, ".*/cupsd$") || $6 == "cupsd") print $1}'` . /etc/TIMEZONE ;; OSF1*) pid=`ps -e | awk '{if (match($5, ".*/cupsd$") || $5 == "cupsd") print $1}'` ;; Linux* | *BSD* | Darwin*) pid=`ps ax | awk '{if (match($5, ".*/cupsd$") || $5 == "cupsd") print $1}'` ;; *) pid="" ;; esac # # Start or stop the CUPS server based upon the first argument to the script. # case $1 in start | restart | reload) if $IS_ON cups; then if test "$pid" != ""; then kill -HUP $pid else if test $? != 0; then $ECHO_FAIL $ECHO "cups: unable to $1 scheduler." exit 1 fi fi $ECHO_OK $ECHO "cups: ${1}ed scheduler." fi ;; stop) if test "$pid" != ""; then kill $pid $ECHO_OK $ECHO "cups: stopped scheduler." fi ;; status) if test "$pid" != ""; then echo "cups: scheduler is running." else echo "cups: scheduler is not running." fi ;; start_msg) # HP-UX non-standard... echo "Starting CUPS Server" ;; stop_msg) # HP-UX non-standard... echo "Starting CUPS Server" ;; *) echo "Usage: cups {reload|restart|start|status|stop}" exit 1 ;; esac # # Exit with no errors. # exit 0 # # End of "$Id: cups.sh.in 6649 2007-07-11 21:46:42Z mike $". #
I removed the "a" param, but its now giving trouble with the x param :P I guess I'll go ahead and install ps on my system :)
Hi, I would like to know if you finally suceeded in compiling CUPS and printing from your ARM. I am trying to cross compile CUPS for an ARM Cortex A9, running Debian And since a lot of people seem to have trouble doing this i'd like to know if we are not trying something we can't achieve. We are trying to do this because we want to install and configure a printer on our board, we only have the .PPD file, everything is working fine with CUPS on our x86 architecture under ubuntu, but the final project will be on ARM, do you think that cross compiling CUPS for our ARM is possible or do you see an other easier solution, giving that we are 2 students, from engineering school involved in the project. The final aim in only to print a given image and not to use all the functionality of the printer. Best regards.