|  |     | 
| Line 1: | Line 1: | 
| − | == Overview ==
 | + | #REDIRECT [[CM-X300: Linux: Kernel]] | 
| − |   |  | 
| − | Linux kernel for CM-X300 modules provides support for on-board peripherals. Current support coverage is specified at [http://www.compulab.co.il/x300cm/html/x300-os-support.htm O/S support coverage map] page. CompuLab provides ready-to-run binary kernel images, and source code of the modifications and additions made to the Linux kernel to work properly with CM-X300 modules.
 |  | 
| − |   |  | 
| − | == Building Linux kernel for CM-X300==
 |  | 
| − |   |  | 
| − | <pre>
 |  | 
| − | mkdir /home/development/cm-x300/kernel
 |  | 
| − | cd /home/development/cm-x300/kernel
 |  | 
| − | wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.tar.bz2
 |  | 
| − | tar xjf linux-2.6.31.tar.bz2
 |  | 
| − | cd linux-2.6.31
 |  | 
| − | cat /path/to/x300-linux/kernel/linux-2.6.31-cm-x300.patch | patch -p1
 |  | 
| − | export ARCH=arm
 |  | 
| − | export CROSS_COMPILE=arm-linux-
 |  | 
| − | make cm_x300_defconfig
 |  | 
| − | make menuconfig
 |  | 
| − | make && make uImage \
 |  | 
| − |      INSTALL_MOD_PATH=/home/development/cm-x300/rootfs make modules_install
 |  | 
| − | </pre>
 |  | 
| − |   |  | 
| − | In the above example, the Linuxkernel image ({{filename|uImage}}) will be created in {{filename|/home/development/cm-x300/kernel/linux-2.6.31/arch/arm/boot}}, and the loadable kernel modules will be installed into the {{filename|/home/development/cm-x300/rootfs/lib/modules}} directory.
 |  | 
| − |   |  | 
| − | Now, if you boot CM-X300 with newly created kernel image and with networked root filesysem at {{filename|/home/development/cm-x300/rootfs/}} the system will be able to properly load kernel modules and you avoid modules versioning problems.
 |  | 
| − |   |  | 
| − | === Creating Linux kernel JFFS2 image===
 |  | 
| − |   |  | 
| − | The Linux kernel should be stored in the CM-X300 NAND flash as a JFFS2 image. This image can be created as follows:
 |  | 
| − |   |  | 
| − | <pre>
 |  | 
| − | mkdir /tmp/cm-x300-kernel/
 |  | 
| − | cp /home/development/cm-x300/kernel/linux-2.6.31/arch/arm/boot/uImage
 |  | 
| − | mkfs.jffs2 --no-cleanmarkers --pad --eraseblock=0x20000 --root=/tmp/cm-x300-kernel --output=/path/to/cm-x300-kernel.jffs2
 |  | 
| − | </pre>
 |  | 
| − |   |  | 
| − | == Using mainline Linux kernel on CM-X300 ==
 |  | 
| − | It is possible to use mainline Linux Kernelon CM-X300 "as is". Just keep in mind that features and fixes listed in below sections are still '''not present''' in the mainline kernel.
 |  | 
| − |   |  | 
| − | === CM-X300 specific additions and changes to Linux kernel 2.6.31 ===
 |  | 
| − | * CM-X300 module revision 1.3 support
 |  | 
| − | * PXA310 cpu support
 |  | 
| − | * USB Host support
 |  | 
| − | * Audio and Touchscreen support
 |  | 
| − | * LCD and backlight support
 |  | 
| − | * WIFI and Bluetooth support
 |  | 
| − | * MMC binding fix
 |  | 
| − | * DA9030 PMIC and battery charger support
 |  | 
| − |   |  | 
| − | === CM-X300 specific additions and changes to Linux kernel 2.6.26 ===
 |  | 
| − | * Basic platform support
 |  | 
| − | * NAND flash support
 |  | 
| − | * PXA frame buffer and LCD support
 |  | 
| − | * WIFI and Bluetooth support
 |  | 
| − | * RTC support
 |  | 
| − | * DA9030 PMIC support
 |  | 
| − | * CPU frequency change support
 |  | 
| − | * Audio and Touchscreen support
 |  | 
| − | * USB Host support
 |  | 
| − |   |  | 
| − | == Device support details ==
 |  | 
| − | === Basic platform support ===
 |  | 
| − | The CM-X300 basic platform support is implemented in the {{filename|linux/arch/arm/mach-pxa/cm-x300.c}} file. This file includes default setup of multifunction pins, registration of the devices integrated in the CM-X300 module and definitions of platform-specific configuration of these devices. This file also includes several routines needed for proper operation of the WI2WI chip (WiFI and Bluetooth).
 |  | 
| − |   |  | 
| − | === I2C support ===
 |  | 
| − | The I2C bus controller support is enabled in the default Linux Kernel for CM-X300.
 |  | 
| − | Standard I2C drivers can be used to access I2C bus on CM-X300 module.<br>
 |  | 
| − | In particular, you can enable the [[Linux_Kernel_for_CM-X300#Generic_i2c-dev_driver|generic i2c-dev driver]] that allows issuing read/write requests to i2c device through {{filename|/dev/i2c-X}} interface or
 |  | 
| − | you can use/implement in-kernel device driver.<br>
 |  | 
| − |   |  | 
| − | ==== Registering an I2C device ====
 |  | 
| − | To register an I2C device, some code needs to be added to the platform initialization file {{filename|arch/arm/mach-pxa/cm-x300.c}}:
 |  | 
| − | * Add '''''struct''' i2c_board_info'' and initialize it using the macro (defined in {{filename|linux/i2c.h}}) {{parameter|I2C_BOARD_INFO}}:
 |  | 
| − | <pre>
 |  | 
| − | static struct i2c_board_info cm_x300_i2c_device = {
 |  | 
| − | 	I2C_BOARD_INFO("device name", <7 bit address>),
 |  | 
| − | 	/* here initialize other fields if used */
 |  | 
| − | 	...
 |  | 
| − | };
 |  | 
| − | </pre>
 |  | 
| − | * Register the device with I2C bus controller:
 |  | 
| − | <pre>
 |  | 
| − | static void __init cm_x300_init_i2c(void)
 |  | 
| − | {
 |  | 
| − | 	...
 |  | 
| − | 	i2c_register_board_info(<i2c bus number>, &cm_x300_i2c_device, 1);
 |  | 
| − | }
 |  | 
| − | </pre>
 |  | 
| − |   |  | 
| − | ==== Generic {{filename|i2c-dev}} driver ====
 |  | 
| − | To enable the generic {{filename|i2c-dev}} driver, in Linux Kernel configuration, in ''Device Drivers'' ---> ''I2C support'' select "''I2C device interface''" either as built-in driver or a module:
 |  | 
| − | <pre>
 |  | 
| − |   ┌─────────────────────────────────────────── I2C support ────────────────────────────────────────────┐
 |  | 
| − |   │  Arrow keys navigate the menu.  <Enter> selects submenus --->.  Highlighted letters are hotkeys.   │
 |  | 
| − |   │  Pressing <Y> includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to exit, <?> for │
 |  | 
| − |   │  Help, </> for Search.  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable         │
 |  | 
| − |   │                                                                                                    │
 |  | 
| − |   │ ┌────────────────────────────────────────────────────────────────────────────────────────────────┐ │
 |  | 
| − |   │ │             --- I2C support                                                                    │ │
 |  | 
| − |   │ │             <M>   I2C device interface                                                         │ │
 |  | 
| − |   │ │             [*]   Autoselect pertinent helper modules                                          │ │
 |  | 
| − |   │ │                   I2C Hardware Bus support  --->                                               │ │
 |  | 
| − |   │ │                   Miscellaneous I2C Chip support  --->                                         │ │
 |  | 
| − |   │ │             [ ]   I2C Core debugging messages                                                  │ │
 |  | 
| − |   │ │             [ ]   I2C Algorithm debugging messages                                             │ │
 |  | 
| − |   │ │             [ ]   I2C Bus debugging messages                                                   │ │
 |  | 
| − |   │ │             [ ]   I2C Chip debugging messages                                                  │ │
 |  | 
| − |   │ └────────────────────────────────────────────────────────────────────────────────────────────────┘ │
 |  | 
| − |   ├────────────────────────────────────────────────────────────────────────────────────────────────────┤
 |  | 
| − |   │                                  <Select>    < Exit >    < Help >                                  │
 |  | 
| − |   └────────────────────────────────────────────────────────────────────────────────────────────────────┘
 |  | 
| − | </pre>
 |  | 
| − | If you choose to compile the driver as a module, the module will be called {{filename|i2c-dev}}.<br>
 |  | 
| − | This will create {{filename|/dev/i2c-X}} files for each registered I2C adapter.<br>
 |  | 
| − | Information on accessing the I2C devices via the generic {{filename|i2c-dev}} driver could be found in {{filename|Documentation/i2c/dev-interface}} in the Linux Kernel tree.
 |  | 
| − |   |  | 
| − | === SPI support ===
 |  | 
| − | PXA3xx SPI controller is backward compatible with PXA2xx and it is handled on CM-X300 the same way as on CM-X270. Please refer to [[SPI support for CM-X270]] article.
 |  | 
| − |   |  | 
| − | == See also ==
 |  | 
| − |   |  | 
| − | * [[Getting started with Linux on CM-X300]]
 |  | 
| − | * [[Linux Development for XScale modules]]
 |  | 
| − | * [[Debian Linux for CM-X300]]
 |  |