Driver building

Discuss Programming
Post Reply
JoeDude
administrator
administrator
Posts: 355
Joined: Sun Feb 08, 2004 1:41 pm
Location: Sutton Coldfield, UK
Contact:

Driver building

Post by JoeDude » Sat Sep 09, 2006 4:43 am

I have a lexmark all in one printer, scanner, copier, fax...

Lexmark apparently doesn't care if you have linux drivers for it...however they have made available a developement tool to DIY. This is what I've found so far;

This looks encouraging...

http://www.lexmark.com/lexmark/sequenti ... en,00.html

Here's the linux requirements list

Requirements
System Requirements

1. Linux Kernel 2.4x or higher
2. GCC 3.2
3. gtkmm version 2.0.2.4
4. sigc ++ version 1.2.4
5. make
6. enscript
7. magic
8. Lexmark USB Scanner Device Driver (for Lexmark AIO Printers ONLY)

Hardware Requirements

1. P2 400 or equivalent
2. 64 MB RAM
3. 20 MB of Free HD space

Build Requirements

1. GCC compiler version 3.2
2. CUPS development libraries
3. SANE-Backend development libraries version 1.0.13



NOTE: LLPDDK has been built and validated on the following Linux releases: RedHat 8.0, RedHat 9.0, Mandrake 9.0, Mandrake 9.1, SuSE 8.1 and SuSE 8.2.
The Lexmark USB Scanner Device Driver package contains the open source codes and the Readme file.

I've ensured I have all the packets it requires and have downloaded the tool, it's in tar.gz format. I haven't unpacket it yet. There are even templates and sample drivers to study. Any suggestions before I get started from the Gurus?

Or is there maybe a sneaky way I could trick Void into doing it for me...u know, like asking really nicely?

Anyway, before I get started, I would love to hear your guys' imput.

User avatar
Void Main
Site Admin
Site Admin
Posts: 5712
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA
Contact:

Post by Void Main » Sat Sep 09, 2006 6:42 am

I also have a Lexmark all-in-one paperweight. At the time I got mine I don't think they had this developers kit available. I don't have time today to do this but hopefully sometime this weekend I can spend some time on it. OR, if you get it working it would be great, then I don't have as much to do. :)

JoeDude
administrator
administrator
Posts: 355
Joined: Sun Feb 08, 2004 1:41 pm
Location: Sutton Coldfield, UK
Contact:

Post by JoeDude » Sat Sep 09, 2006 6:48 am

I'll get crackin!

So much for crossing your fingers and hoping!
joedude@joedude-desktop:~/LEXUSB-SCANNER-1.0-1$ make
gcc -DMODULE -D__KERNEL__ -I/usr/src/linux-`uname -r`/include -include /usr/src/linux-`uname -r`/include/linux/modversions.h -c lxkscanner.c
cc1: error: /usr/src/linux-2.6.15-26-386/include/linux/modversions.h: No such file or directory
In file included from /usr/include/linux/sched.h:16,
from /usr/include/linux/module.h:9,
from lxkscanner.h:31,
from lxkscanner.c:358:
/usr/include/linux/signal.h:2:2: warning: #warning "You should include <signal.h>. This time I will do it for you."
In file included from /usr/include/linux/resource.h:4,
from /usr/include/linux/sched.h:79,
from /usr/include/linux/module.h:9,
from lxkscanner.h:31,
from lxkscanner.c:358:
/usr/include/linux/time.h:9: error: redefinition of ‘struct timespec’
/usr/include/linux/time.h:15: error: redefinition of ‘struct timeval’
/usr/include/linux/time.h:20: error: redefinition of ‘struct timezone’
/usr/include/linux/time.h:47: error: redefinition of ‘struct itimerval’
In file included from lxkscanner.h:31,
from lxkscanner.c:358:
/usr/include/linux/module.h:41: error: field ‘attr’ has incomplete type
/usr/include/linux/module.h:49: error: field ‘kobj’ has incomplete type
In file included from lxkscanner.c:358:
lxkscanner.h:34:25: error: asm/uaccess.h: No such file or directory
lxkscanner.h:36:24: error: linux/slab.h: No such file or directory
lxkscanner.h:37:25: error: linux/delay.h: No such file or directory
In file included from lxkscanner.c:358:
lxkscanner.h:76: error: array type has incomplete element type
lxkscanner.h:125: warning: parameter names (without types) in function declaration
lxkscanner.h:129: error: syntax error before ‘devfs_handle_t’
lxkscanner.h:129: warning: no semicolon at end of struct or union
lxkscanner.h:132: error: syntax error before ‘scn_minor’
lxkscanner.h:132: warning: data definition has no type or storage class
lxkscanner.h:138: error: syntax error before ‘rd_wait_q’
lxkscanner.h:138: warning: data definition has no type or storage class
lxkscanner.h:141: error: syntax error before ‘}’ token
lxkscanner.h:143: error: syntax error before ‘usb_devfs_handle’
lxkscanner.h:143: warning: data definition has no type or storage class
lxkscanner.h:155: warning: ‘packed’ attribute ignored
lxkscanner.c: In function ‘irq_scanner’:
lxkscanner.c:371: error: dereferencing pointer to incomplete type
lxkscanner.c:373: error: dereferencing pointer to incomplete type
lxkscanner.c:376: error: dereferencing pointer to incomplete type
lxkscanner.c:380: error: dereferencing pointer to incomplete type
lxkscanner.c: At top level:
lxkscanner.c:386: warning: ‘struct file’ declared inside parameter list
lxkscanner.c:386: warning: its scope is only this definition or declaration, which is probably not what you want
lxkscanner.c:386: warning: ‘struct inode’ declared inside parameter list
lxkscanner.c: In function ‘open_scanner’:
lxkscanner.c:391: error: ‘kdev_t’ undeclared (first use in this function)
lxkscanner.c:391: error: (Each undeclared identifier is reported only once
lxkscanner.c:391: error: for each function it appears in.)
lxkscanner.c:391: error: syntax error before ‘scn_minor’
lxkscanner.c:397: error: ‘scn_mutex’ undeclared (first use in this function)
lxkscanner.c:399: error: dereferencing pointer to incomplete type
lxkscanner.c:406: error: called object ‘err’ is not a function
lxkscanner.c:412: error: dereferencing pointer to incomplete type
lxkscanner.c:414: error: dereferencing pointer to incomplete type
lxkscanner.c:419: error: called object ‘err’ is not a function
lxkscanner.c:424: error: dereferencing pointer to incomplete type
lxkscanner.c:425: error: called object ‘err’ is not a function
lxkscanner.c:430: error: dereferencing pointer to incomplete type
lxkscanner.c:431: error: called object ‘err’ is not a function
lxkscanner.c:436: error: dereferencing pointer to incomplete type
lxkscanner.c:438: error: dereferencing pointer to incomplete type
lxkscanner.c:440: error: dereferencing pointer to incomplete type
lxkscanner.c:445: error: dereferencing pointer to incomplete type
lxkscanner.c: At top level:
lxkscanner.c:454: warning: ‘struct file’ declared inside parameter list
lxkscanner.c:454: warning: ‘struct inode’ declared inside parameter list
lxkscanner.c: In function ‘close_scanner’:
lxkscanner.c:458: error: ‘kdev_t’ undeclared (first use in this function)
lxkscanner.c:458: error: syntax error before ‘scn_minor’
lxkscanner.c:460: error: dereferencing pointer to incomplete type
lxkscanner.c:469: error: ‘scn_mutex’ undeclared (first use in this function)
lxkscanner.c:472: error: dereferencing pointer to incomplete type
lxkscanner.c:473: error: dereferencing pointer to incomplete type
lxkscanner.c:475: error: dereferencing pointer to incomplete type
lxkscanner.c:478: error: dereferencing pointer to incomplete type
lxkscanner.c: At top level:
lxkscanner.c:487: warning: ‘struct file’ declared inside parameter list
lxkscanner.c: In function ‘write_scanner’:
lxkscanner.c:495: error: ‘kdev_t’ undeclared (first use in this function)
lxkscanner.c:495: error: syntax error before ‘scn_minor’
lxkscanner.c:503: error: dereferencing pointer to incomplete type
lxkscanner.c:505: error: dereferencing pointer to incomplete type
lxkscanner.c:507: error: dereferencing pointer to incomplete type
lxkscanner.c:509: error: dereferencing pointer to incomplete type
lxkscanner.c:511: error: dereferencing pointer to incomplete type
lxkscanner.c:513: error: dereferencing pointer to incomplete type
lxkscanner.c:513: error: ‘CURRENT_TIME’ undeclared (first use in this function)
lxkscanner.c:517: error: ‘current’ undeclared (first use in this function)
lxkscanner.c:518: error: ‘ERESTARTSYS’ undeclared (first use in this function)
lxkscanner.c:524: error: dereferencing pointer to incomplete type
lxkscanner.c:529: error: dereferencing pointer to incomplete type
lxkscanner.c:567: error: dereferencing pointer to incomplete type
lxkscanner.c: At top level:
lxkscanner.c:574: warning: ‘struct file’ declared inside parameter list
lxkscanner.c: In function ‘read_scanner’:
lxkscanner.c:582: error: ‘kdev_t’ undeclared (first use in this function)
lxkscanner.c:582: error: syntax error before ‘scn_minor’
lxkscanner.c:591: error: dereferencing pointer to incomplete type
lxkscanner.c:593: error: dereferencing pointer to incomplete type
lxkscanner.c:595: error: dereferencing pointer to incomplete type
lxkscanner.c:597: error: dereferencing pointer to incomplete type
lxkscanner.c:599: error: dereferencing pointer to incomplete type
lxkscanner.c:604: error: dereferencing pointer to incomplete type
lxkscanner.c:604: error: ‘CURRENT_TIME’ undeclared (first use in this function)
lxkscanner.c:609: error: ‘current’ undeclared (first use in this function)
lxkscanner.c:610: error: ‘ERESTARTSYS’ undeclared (first use in this function)
lxkscanner.c:616: error: dereferencing pointer to incomplete type
lxkscanner.c:616: error: dereferencing pointer to incomplete type
lxkscanner.c:640: error: dereferencing pointer to incomplete type
lxkscanner.c:640: error: dereferencing pointer to incomplete type
lxkscanner.c:649: error: dereferencing pointer to incomplete type
lxkscanner.c:654: error: ‘USB_ST_DATAUNDERRUN’ undeclared (first use in this function)
lxkscanner.c:687: error: dereferencing pointer to incomplete type
lxkscanner.c: At top level:
lxkscanner.c:693: warning: ‘struct file’ declared inside parameter list
lxkscanner.c:693: warning: ‘struct inode’ declared inside parameter list
lxkscanner.c: In function ‘ioctl_scanner’:
lxkscanner.c:697: error: ‘kdev_t’ undeclared (first use in this function)
lxkscanner.c:697: error: syntax error before ‘scn_minor’
lxkscanner.c:699: error: dereferencing pointer to incomplete type
lxkscanner.c:706: error: dereferencing pointer to incomplete type
lxkscanner.c:711: error: dereferencing pointer to incomplete type
lxkscanner.c:713: error: dereferencing pointer to incomplete type
lxkscanner.c: At top level:
lxkscanner.c:818: error: variable ‘usb_scanner_fops’ has initializer but incomplete type
lxkscanner.c:819: error: unknown field ‘read’ specified in initializer
lxkscanner.c:819: warning: excess elements in struct initializer
lxkscanner.c:819: warning: (near initialization for ‘usb_scanner_fops’)
lxkscanner.c:820: error: unknown field ‘write’ specified in initializer
lxkscanner.c:820: warning: excess elements in struct initializer
lxkscanner.c:820: warning: (near initialization for ‘usb_scanner_fops’)
lxkscanner.c:821: error: unknown field ‘ioctl’ specified in initializer
lxkscanner.c:821: warning: excess elements in struct initializer
lxkscanner.c:821: warning: (near initialization for ‘usb_scanner_fops’)
lxkscanner.c:822: error: unknown field ‘open’ specified in initializer
lxkscanner.c:822: warning: excess elements in struct initializer
lxkscanner.c:822: warning: (near initialization for ‘usb_scanner_fops’)
lxkscanner.c:823: error: unknown field ‘release’ specified in initializer
lxkscanner.c:823: warning: excess elements in struct initializer
lxkscanner.c:823: warning: (near initialization for ‘usb_scanner_fops’)
lxkscanner.c: In function ‘probe_scanner’:
lxkscanner.c:837: error: ‘kdev_t’ undeclared (first use in this function)
lxkscanner.c:837: error: syntax error before ‘scn_minor’
lxkscanner.c:872: error: invalid application of ‘sizeof’ to incomplete type ‘struct usb_device_id’
lxkscanner.c:873: error: dereferencing pointer to incomplete type
lxkscanner.c:874: error: dereferencing pointer to incomplete type
lxkscanner.c:879: error: dereferencing pointer to incomplete type
lxkscanner.c:880: error: dereferencing pointer to incomplete type
lxkscanner.c:892: error: dereferencing pointer to incomplete type
lxkscanner.c:905: error: dereferencing pointer to incomplete type
lxkscanner.c:913: error: ‘struct usb_interface_descriptor’ has no member named ‘endpoint’
lxkscanner.c:1043: error: ‘scn_mutex’ undeclared (first use in this function)
lxkscanner.c:1059: error: invalid application of ‘sizeof’ to incomplete type ‘struct scn_usb_data’
lxkscanner.c:1059: error: ‘GFP_KERNEL’ undeclared (first use in this function)
lxkscanner.c:1059: warning: assignment makes pointer from integer without a castlxkscanner.c:1064: warning: incompatible implicit declaration of built-in function ‘memset’
lxkscanner.c:1064: error: invalid application of ‘sizeof’ to incomplete type ‘struct scn_usb_data’
lxkscanner.c:1066: error: dereferencing pointer to incomplete type
lxkscanner.c:1073: error: dereferencing pointer to incomplete type
lxkscanner.c:1075: error: dereferencing pointer to incomplete type
lxkscanner.c:1079: error: dereferencing pointer to incomplete type
lxkscanner.c:1089: error: dereferencing pointer to incomplete type
lxkscanner.c:1095: error: dereferencing pointer to incomplete type
lxkscanner.c:1097: error: dereferencing pointer to incomplete type
lxkscanner.c:1099: error: dereferencing pointer to incomplete type
lxkscanner.c:1104: error: dereferencing pointer to incomplete type
lxkscanner.c:1107: error: dereferencing pointer to incomplete type
lxkscanner.c:1109: error: dereferencing pointer to incomplete type
lxkscanner.c:1114: error: dereferencing pointer to incomplete type
lxkscanner.c:1116: error: dereferencing pointer to incomplete type
lxkscanner.c:1122: error: dereferencing pointer to incomplete type
lxkscanner.c:1126: error: dereferencing pointer to incomplete type
lxkscanner.c:1127: error: dereferencing pointer to incomplete type
lxkscanner.c:1129: error: dereferencing pointer to incomplete type
lxkscanner.c:1130: error: dereferencing pointer to incomplete type
lxkscanner.c:1131: error: dereferencing pointer to incomplete type
lxkscanner.c:1133: error: dereferencing pointer to incomplete type
lxkscanner.c:1134: error: dereferencing pointer to incomplete type
lxkscanner.c:1135: error: dereferencing pointer to incomplete type
lxkscanner.c:1136: error: dereferencing pointer to incomplete type
lxkscanner.c:1137: error: dereferencing pointer to incomplete type
lxkscanner.c:1139: warning: incompatible implicit declaration of built-in function ‘sprintf’
lxkscanner.c:1139: error: dereferencing pointer to incomplete type
lxkscanner.c:1141: error: dereferencing pointer to incomplete type
lxkscanner.c:1142: error: ‘DEVFS_FL_DEFAULT’ undeclared (first use in this function)
lxkscanner.c:1143: error: dereferencing pointer to incomplete type
lxkscanner.c:1144: error: ‘S_IFCHR’ undeclared (first use in this function)
lxkscanner.c:1144: error: ‘S_IRUSR’ undeclared (first use in this function)
lxkscanner.c:1144: error: ‘S_IWUSR’ undeclared (first use in this function)
lxkscanner.c:1144: error: ‘S_IRGRP’ undeclared (first use in this function)
lxkscanner.c:1145: error: ‘S_IWGRP’ undeclared (first use in this function)
lxkscanner.c:1145: error: ‘S_IROTH’ undeclared (first use in this function)
lxkscanner.c:1145: error: ‘S_IWOTH’ undeclared (first use in this function)
lxkscanner.c:1146: error: dereferencing pointer to incomplete type
lxkscanner.c: In function ‘disconnect_scanner’:
lxkscanner.c:1161: error: ‘scn_mutex’ undeclared (first use in this function)
lxkscanner.c:1162: error: dereferencing pointer to incomplete type
lxkscanner.c:1164: error: dereferencing pointer to incomplete type
lxkscanner.c:1165: error: dereferencing pointer to incomplete type
lxkscanner.c:1166: error: dereferencing pointer to incomplete type
lxkscanner.c:1169: error: dereferencing pointer to incomplete type
lxkscanner.c:1169: error: dereferencing pointer to incomplete type
lxkscanner.c:1171: error: dereferencing pointer to incomplete type
lxkscanner.c:1172: error: dereferencing pointer to incomplete type
lxkscanner.c:1174: error: dereferencing pointer to incomplete type
lxkscanner.c:1175: error: dereferencing pointer to incomplete type
lxkscanner.c:1176: error: dereferencing pointer to incomplete type
lxkscanner.c:1177: error: dereferencing pointer to incomplete type
lxkscanner.c: At top level:
lxkscanner.c:1183: error: variable ‘scanner_driver’ has initializer but incomplete type
lxkscanner.c:1184: error: unknown field ‘name’ specified in initializer
lxkscanner.c:1184: warning: excess elements in struct initializer
lxkscanner.c:1184: warning: (near initialization for ‘scanner_driver’)
lxkscanner.c:1185: error: unknown field ‘probe’ specified in initializer
lxkscanner.c:1185: warning: excess elements in struct initializer
lxkscanner.c:1185: warning: (near initialization for ‘scanner_driver’)
lxkscanner.c:1186: error: unknown field ‘disconnect’ specified in initializer
lxkscanner.c:1186: warning: excess elements in struct initializer
lxkscanner.c:1186: warning: (near initialization for ‘scanner_driver’)
lxkscanner.c:1187: error: unknown field ‘fops’ specified in initializer
lxkscanner.c:1187: warning: excess elements in struct initializer
lxkscanner.c:1187: warning: (near initialization for ‘scanner_driver’)
lxkscanner.c:1188: error: unknown field ‘minor’ specified in initializer
lxkscanner.c:1188: warning: excess elements in struct initializer
lxkscanner.c:1188: warning: (near initialization for ‘scanner_driver’)
lxkscanner.c:1189: error: unknown field ‘id_table’ specified in initializer
lxkscanner.c:1189: warning: excess elements in struct initializer
lxkscanner.c:1189: warning: (near initialization for ‘scanner_driver’)
make: *** [lxkscanner.o] Error 1
Here comes the fun then! Of course I should have known that all ready...there is no testing for debian apparent. It's got Redhat 9 and 10, suse 8 and 9 and mandrake 9. So, I'm not all that shocked.

User avatar
Void Main
Site Admin
Site Admin
Posts: 5712
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA
Contact:

Post by Void Main » Sat Sep 09, 2006 12:45 pm

It looks like your kernel headers aren't installed. You'll need those installed to build a module.

JoeDude
administrator
administrator
Posts: 355
Joined: Sun Feb 08, 2004 1:41 pm
Location: Sutton Coldfield, UK
Contact:

Post by JoeDude » Sat Sep 09, 2006 1:11 pm

workin on it now.

worker201
guru
guru
Posts: 668
Joined: Sun Jun 13, 2004 6:38 pm
Location: Hawaii

Post by worker201 » Sat Sep 09, 2006 2:38 pm

OMG, Joe, I was only joking!!!!!!!!

User avatar
Void Main
Site Admin
Site Admin
Posts: 5712
Joined: Wed Jan 08, 2003 5:24 am
Location: Tuxville, USA
Contact:

Post by Void Main » Sat Sep 09, 2006 2:40 pm

I just looked over that driver page and I don't think it will help me out at all. I have an X1100 (or X1150, too lazy to go look). There is no driver for the one I have and on linuxprinting.org they list it as a paperweight. :)

JoeDude
administrator
administrator
Posts: 355
Joined: Sun Feb 08, 2004 1:41 pm
Location: Sutton Coldfield, UK
Contact:

Post by JoeDude » Sat Sep 09, 2006 4:40 pm

mines the same. There isn't even anything in the x2*** range either. My problem I think is I'm using a red hat template from there and all the references I can find on debian/Ubuntu driver building. It's getting to be a bitch...especially since now I've found the redhat model is too different from the series of printer I have...

I think I'm going to have to get a lot of books and build from scratch....which I don't even know where to begin...

I know you were only joking Worker201...but someones got to do it...why not me?

worker201
guru
guru
Posts: 668
Joined: Sun Jun 13, 2004 6:38 pm
Location: Hawaii

Post by worker201 » Sat Sep 09, 2006 9:15 pm

Since you have a RH template, maybe it would be easier to start from there. Then later you can make a Deb package, after you understand how the RH version works.

JoeDude
administrator
administrator
Posts: 355
Joined: Sun Feb 08, 2004 1:41 pm
Location: Sutton Coldfield, UK
Contact:

Post by JoeDude » Sun Sep 10, 2006 2:37 am

If I'm clever enough...I may even be able to alien -i it!

JoeDude
administrator
administrator
Posts: 355
Joined: Sun Feb 08, 2004 1:41 pm
Location: Sutton Coldfield, UK
Contact:

Post by JoeDude » Sun Sep 10, 2006 5:44 am

ok...here's the files I have to work wit...it's going to be a pain in the but now, the closest I could find to my series aio was the x5250. And as I said, it's for redhat. However, it seems to be CUPS and/or GS compliant, so maybe it's just a matter of minor modifications. After a sucessful Alien -i, here it is, as a deb...
  • ./
    usr/
    usr/share/
    usr/share/doc/
    usr/share/doc/x5250llpddk/
    usr/share/doc/x5250llpddk/copyright
    usr/share/doc/x5250llpddk/changelog.Debian.gz
    usr/include/
    usr/include/lexmark-H/
    usr/include/lexmark-H/alignmentdata.h
    usr/include/lexmark-H/cartridgemanager.h
    usr/include/lexmark-H/cartridgeuserinterface.h
    usr/include/lexmark-H/cleaningdata.h
    usr/include/lexmark-H/clock.h
    usr/include/lexmark-H/errorcommunicator.h
    usr/include/lexmark-H/linuxinkjetprinter.h
    usr/include/lexmark-H/mediamanager.h
    usr/include/lexmark-H/portmonitor.h
    usr/include/lexmark-H/printerdevice.h
    usr/include/lexmark-H/printjobmanager.h
    usr/include/lexmark-H/scanerrorinterface.h
    usr/include/lexmark-H/scannerdevice.h
    usr/lib/
    usr/lib/liblexx5250printer.a
    usr/lib/liblexx5250printer.la
    usr/lib/liblexx5250printer.so.0.0.0
    usr/lib/liblexx5250printjob.a
    usr/lib/liblexx5250printjob.la
    usr/lib/liblexx5250printjob.so.0.0.0
    usr/lib/liblexx5250scanner.a
    usr/lib/liblexx5250scanner.la
    usr/lib/liblexx5250scanner.so.0.0.0
    usr/lib/liblxbtflib.so
    usr/lib/liblxbthpec.so
    usr/lib/liblxbthpeh.so
    usr/lib/liblxbthpep.so
    usr/local/
    usr/local/x5250llpddk/
    usr/local/x5250llpddk/utility/
    usr/local/x5250llpddk/utility/lxbtaual.out
    usr/local/x5250llpddk/utility/lxbtcln.out
    usr/local/x5250llpddk/utility/lxbtclr1.lut
    usr/local/x5250llpddk/utility/lxbtphau.out
    usr/local/x5250llpddk/utility/lxbtphcl.out
    usr/local/x5250llpddk/utility/scanGray.lut
    usr/local/x5250llpddk/utility/scanRGB.lut
    usr/lib/liblexx5250printer.so
    usr/lib/liblexx5250printer.so.0
    usr/lib/liblexx5250printjob.so
    usr/lib/liblexx5250printjob.so.0
    usr/lib/liblexx5250scanner.so
    usr/lib/liblexx5250scanner.so.0

JoeDude
administrator
administrator
Posts: 355
Joined: Sun Feb 08, 2004 1:41 pm
Location: Sutton Coldfield, UK
Contact:

Post by JoeDude » Sun Sep 10, 2006 4:18 pm

OK...no tips...I'm on my own...I'll let you know how I get on.

Post Reply