As I said I use 0xdroid provided omap3-2.6.32 Kernel, there is no omap- serial.c inside. At first I wanted to add 2.6.37 file to 2.6.32, but it failed....since file dependency. So I added the 2.6.32 omap-serial.c to my kernel, here is my steps:
(Reference PATCH omap: Hack: Switch sholes to the omap serial driver http://android.git.kernel.org/?p=kernel/omap.git;a=commitdiff;h=3e9adf317ef6930917923788033b67f669fa01e5) 1. Add new files drivers/serial/omap-serial.c (http://android.git.kernel.org/?p=kernel/ omap.git;a=tree;f=drivers/ serial;h=55a7cb5d99fa6f9e666010eaf31920fe7df355d0;hb=refs/heads/ archive/android-omap-2.6.32) arch/arm/plat-omap/include/plat/omap-serial.h (http:// android.git.kernel.org/?p=kernel/omap.git;a=tree;f=arch/arm/plat-omap/ include/plat;h=7f4702eae7e73bed1d7bbc10a3e0a09b17237c54;hb=refs/heads/ archive/android-omap-2.6.32) arch/arm/include/asm/mach/serial_omap.h (http:// android.git.kernel.org/?p=kernel/omap.git;a=tree;f=arch/arm/include/ asm/mach;h=0b1b6e286a8d36a58c0a5d4c7b4c6be7fbf66ca4;hb=refs/heads/ archive/android-omap-2.6.32) 2. Replace the 0xdroid files by the 2.6.32 latest one (http:// android.git.kernel.org/?p=kernel/omap.git;a=tree;hb=refs/heads/archive/ android-omap-2.6.32) arch/arm/mach-omap2/serial.c arch/arm/plat-omap/include/plat/serial.h include/linux/serial_core.h include/linux/serial_reg.h include/linux/tty.h 3. Modify 0xdroid ordinary files by reference patch (http:// android.git.kernel.org/?p=kernel/ omap.git;a=commitdiff;h=3e9adf317ef6930917923788033b67f669fa01e5) arch/arm/plat-omap/include/plat/board.h drivers/serial/Makefile drivers/serial/Kconfig arch/arm/mach-omap2/board-sholes.c 4.Modify 0xdroid ordinary files which patch does not mention (1) arch/arm/mach-omap2/board-devkit8000.c - omap_serial_init(); +omap_serial_init(0,0); static struct omap_board_config_kernel devkit8000_config[] _initdata = { - /* XXX { OMAP_TAG_UART, &devkit8000_uart_config }, - */ }; - /* XXX static struct omap_uart_config devkit8000_uart_config _initdata = { .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), }; - */ (2) arch/arm/mach-omap2/board-omap3beagle.c - omap_serial_init(); +omap_serial_init(0,0); +static struct omap_board_config_kernel omap3_beagle_config[] _initdata = { + { OMAP_TAG_LCD, &omap3_beagle_lcd_config }, + //christine/* XXX + { OMAP_TAG_UART, &omap3_beagle_uart_config }, +}; +static struct omap_uart_config omap3_beagle_uart_config _initdata = { + .enabled_uarts = ((1 << 0) | (1 << 1) | (1 << 2)), +}; 5. Modify the omap-serial.c to support the correct speed Because 48000000/16/3=1M, not 48000000/13/x And 48000000/16/2=1.5M, not 48000000/13/x //devkit8000-0x5-kernel/drivers/serial/omap-serial.c serial_omap_get_divisor(struct uart_port *port, unsigned int baud) { unsigned int divisor; - if (baud > OMAP_MODE13X_SPEED && baud != 3000000) + if (baud > OMAP_MODE13X_SPEED && baud != 3000000 && baud != 1000000 && baud != 1500000) divisor = 13; else divisor = 16; return port->uartclk/(baud * divisor); } static void serial_omap_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { . . - if (baud > 230400 && baud != 3000000) + if (baud > 230400 && baud != 3000000 && baud != 1000000 && baud != 1500000) serial_out(up, UART_OMAP_MDR1, OMAP_MDR1_MODE13X); else serial_out(up, UART_OMAP_MDR1, OMAP_MDR1_MODE16X); . . . } 6. Add new driver $ make ARCH=arm menuconfig <Y> to include the items Device Drivers > Character devices > Serial drivers > [*] OMAP serial port support And choose all the drivers under omap serial port support 7. make Besides, make sure your serial application on Android set the speed as you want. I use busybox's microcom, and I have to define the speed > 921600bps by myself. Christine On 3月22日, 下午5時00分, Christine Chen <[email protected]> wrote: > The problem was solved. > Now the UART1 transmission can achieve 3.5Mbps. > I'll posted the method later, hope it will help others who is > developing on UART communication. > > Christine > > On 3月2日, 下午1時48分, Christine Chen <[email protected]> wrote: > > > > > > > > > Hi all: > > > I am running Android Ecalir on Devkit8000 board OMAP3530. > > The kernel I used was git from 0xdroid branch omap3-2.6.32. > > > My goal is getting higher UART baud rate(3M). > > I found the patch “serial: Add OMAP high-speed UART > > driver”.http://git.kernel.org/?p=linux/kernel/git/tmlind/linux-omap-2.6.git;a... > > I followed the patch to add the 2.6.37 omap-serial driver (omap- > > serial.c, omap-serial.h,etc.) to 2.6.32 kernel. > > Because 2.6.32 serial.c doesn’t mention about “CONFIG _SERIAL_OMAP”, > > so I also replaced it with 2.6.37 serial.c. > > > Problem: I can’t use UART1 and UART3 to communicate with PC now. > > Even the bootargs is “console=ttyS2,115200n8” or > > “console=ttyO2,115200n8”, there is no boot information on console. > > ===================================================================== > > The message stopped at : > > > Starting kernel ... > > Uncompressing > > Linux...................................................................... > > ........................................................................... > > .............................. > > done, booting the kernel. > > ===================================================================== > > > After booting, it can enter android filesystem successfully. > > There is /dev/ttyS*, but there is no /dev/ttyO*. > > > Then I disabled the new driver CONFIG _SERIAL_OMAP and used 8250, but > > the result is the same. > > Is it because I missed to modify any related files when I replaced > > 2.6.32 serial.c with 2.6.37 version? (For example, changing > > omap_hwmod_34xx.h to omap_hwmod_3xxx.c) > > > Any idea to add the 2.6.37 omap-serial driver to 2.6.32 kernel or get / > > dev/ttyO* on 2.6.32? > > > Thanks. > > > Christine -- unsubscribe: [email protected] website: http://groups.google.com/group/android-porting
