text:
Android on OMAP
This page collects information about and guides you through the installation of Google's Android on TI's ARM based OMAP SoCs.
Note: Only small parts of this page should be TI OMAP specific. The basic tasks should also apply to all other ARM926 or higher based SoCs at least able to run a 2.6.23 Linux kernel.
Note: If you like this page, please see the Android Portal on this site for much more information about Android systems programming. See Android Porting for more links to porting information, articles and tutorials.
Note: This article assumes that your are familiar with some basics of embedded ARM Linux. E.g. you should know how to use diff & patch, how to boot your embedded ARM SoC with a recent non-Android Linux, how to use a cross compiler etc.
- 1 Android
- 2 Hardware
- 3 Compiler
- 4 Code
- 5 Target
- 6.1 Kernel patch
- 6.2 OpenBinder
- 6.3 Devices nodes
- 6.4 /dev/xxx minor numbers
- 6.5 /dev/fb0
- 6.6 Blank screen
- 6.7 Page flipping frame buffer
- 6.8 Android start crashes
- 6.9 Power management
- 6.10 TLS issue
- 6.11 TLS issue and processors
- 6.12 TLS issue workaround
- 6.13 Red cycle eye runtime speed
- 6.14 File not found
- 6.15 Limited main memory
- 6.16 Some buttons work, some not
- 6.17 Filesystem, JFFS2 and SIGSEGV
- 6.18 Using JFFS2
- 6.19 Nokia N8x0 and Android SDK
- 6.20 N8x0 and recent OMAP git kernel
- 6.21 N810 keys
- 6.22 N8x0 touchscreen
- 6.23 Nokia770 support
- 6.24 HW interfaces support
- 7 Links
- 8 Contact
- 9 Videos
- 10 Screenshots
What is Android (not)
Android is a software stack for mobile devices that includes an operating system, middleware and key applications. See Google's What is Android? page and Benno's What is Android? and What Android isn't page for more details about Android.
From time to time Google updates their Android releases. At time of writing this article version m5-rc14 was the recent one. You should always use the latest available version. And make sure you use an Android kernel (patch) for your hardware that matches the file system version (see below).
Android SDK isn't targeted for a special (ARM) SoC. Instead, they use QEMU to create a virtual ARM SoC called Goldfish. The virtual ARM SoC boots an (currently 2.6.23, m5-rc14) ARM Linux kernel with Goldfish platform support on your (x86) Windows, MacOS X or Linux host.
This virtual ARM SoC comprises:
- ARM926ej-S CPU
- Thumb support
- Keyboard
- USB Gadget
- Framebuffer
- TTY driver
- Software compiled for ARMv5TEJ instruction set (!) with EABI
- no TLS yet
Real hardware
Running Android on real hardware, some prerequisites should be fulfilled:
- SoC with ARM926 or higher (e.g. ARM11) (check ARM MPCore or ARM Cortex regarding TLS issue)
- Note: ARM920T with ARMv4 instruction set will not work
- You have already a recent (~2.6.23) Linux kernel with Thumb & MMU & EABI etc support running on your target
- Soc/HW has and Linux kernel supports
- Display/frame buffer (touchscreen would be good but optional). Frame buffer has to support double buffer/page flipping.
- Keyboard
- USB (optional)
- RTC (optional?)
- Serial console
- Some storage, sufficient for ~64MB, e.g. NFS or USB stick or NAND or NOR or MMC/SDcard etc. NFS would be easiest for development
- Sufficient main memory (SDRAM) >=32MB. While 32MB seems to be enough to start, system will be really slow then. Therefore 32MB is sufficient for proof of concept, but not for a usable system.
Known to work HW
- OMAP1 based boards (ARM v5 ARM926)
- OMAP2 based boards (ARM v6 ARM11)
- omap2530evm 2430OSK is renamed as 2530EVM based on TI's recommendation (ARM v6 ARM1136jf-s)
- Sharp Zaurus SL-C760(PXA255)
- Sharp Zaurus SL-C1000(PXA270)
- Sharp Zaurus SL-C3000(PXA270)
- Armadillo-500 and Armadillo Panel Computer (Freescale i.MX31L ARM11)
- OMAP1 based OSK (OMAP5912 ARM926 with only 32MB SDRAM). Really slow, mainly usable as proof of concept.
- AM/DM 37x based Hardware AM/DM37xEVM from Mistral
Android internals ML, OMAP ML and Android on N810 page. Working Android port for Nokia Internet Tablets can be found here.
- OMAP3430 based Hardware OMAP3430 based Zoom2 from LogicPD. DSP acceleration for multimedia use cases as well as WLAN is also supported.
- OMAP3530 based Hardware OMAP3EVM from Mistral (Android runs on ARM Cortex™-A8 Core)
- OMAP3530 based BeagleBoard using code from Rupesh Gujare.
- OMAP3530 based Hardware TAO-3530 from TechNexion (Android runs on ARM Cortex™-A8 Core)
- OMAP3530 based DevKit8000 from Embest
- OMAP3530 based SBC8100 Single Board Computer from Embest
- OMAP3530 Open-source MID Solution K7 from OpenSourceMID.org
- TI DM3730 based DevKit8500D from Embest
- TI AM3715 based DevKit8500A from Embest
- TI AM3359 based DevKit8600 from Embest
- AM335x (AM3352/3354/3359) based EVM MYD-AM335X from MYIR
- AM335x (AM3352/3354/3359) based SoM MYC-AM335X from MYIR
Known to not work HW
- Neo 1973 (ARM920T)
Getting Android working on real hardware, you need an ARM EABI (good EABI description, ignore the Debian specific stuff) compatible development environment. I.e., your tool chain, your kernel and user space must be compatible to ARM EABI. If you don't like to create your own ARM EABI compatible compiler, linker, library etc. you should use CodeSourcery's ARM GNU/Linux tool chain.
Note: The naming in the CodeSourcery download section is slightly confusing. You need the ARM GNU/Linux named tool chain which is indeed an ARM GNU/Linux EABI tool chain with glibc. The ARM EABI named tool chain there is something normally known as arm-elf tool chain without any Linux support and without glibc.
As mentioned above, the Android SDK contains an emulator where a virtual ARM device runs the Android SW on your host PC. The Linux kernel used in this emulator is available in source code. In contrast, the user space file system (applications) is currently only available as binary as part of the SDK.
To get Android running on real HW, currently you need both, matching SDK and kernel source. You need kernel source to extract Android specific patches to add them to your SoC specific kernel. And SDK to get Android user space file system binaries. While getting Android kernel patches is somehow straight forward, extracting user space file system with Android applications in it is a little bit tricky.
On Android project page the source code of the kernel is available. From full kernel tree with Android modifications included you can extract patches. With this, you have to extract the Android specific patches yourself from the complete kernel tree, use already extracted patches or get kernel patches by git.
Patch extraction
See third paragraph of Benno's Android on NEO 1973 article.
- Download matching version (e.g. m5-rc14) of Android kernel source. Besides complete kernel source this will contain Android specific changes.
- Download matching (e.g. 2.6.23) stock Linux kernel (or use e.g. git to check out stock kernel version) and diff both kernels to get Android related changes.
- As we want to run Android on real hardware, you can throw away all QEMU and Goldfish related changes. If you don't want to use yaffs2 file system (e.g. cause you don't have NAND or have it already in your tree), throw away yaffs2 related changes as well. If you use m5-rc14 (or higher?) you can remove OpenBinder related files (/driver/binder) as well. Result should be a generic, no ARM or OMAP specific Android patch you can apply to your (e.g. 2.6.23) kernel for your ARM based SoC.
Note: There seems to be some effort to make Android kernel patches available in a easier usable format.
Extracted patches
At some locations there are ready made patches available. The advantage of this is that you don't have to extract the patches yourself. The disadvantage is that you can't always be sure that they contain everything you need and that they match your SDK/user space file system (see below) version.
- Benno's no Qemu no goldfish no yaffs2 patch, as of date of Benno's article most probably based on m3-rc20.
Note: Some guys on OMAP mailing list have Android patches extracted (currently from m5-rc14) and are willing to share them. Unfortunately they don't have any permanent web storage yet. If you have and like to help community with providing some web space, contact OMAP list.
Git patches
There are Android kernel patches available using Android's git repository. But have a look to Brian's notes regarding this.
File System
Getting user space file system binaries running in emulator extracted is slightly tricky. We have to extract the binaries as currently access to source code have only Google itself and eventually WindRiver.
Again, there are two ways to get user space binaries: Extracting them your self or taking already extracted ones.
Binary extraction
The user space applications compiled for ARMv5 EABI are part of the Android SDK in system.img and userdata.img in tools/lib/images directory of SDK.
- Download SDK and unzip it
- system.img and userdata.img are yaffs2 images. There is no way yet to mount them directly on a host to extract their content. An unyaffs tool is missing, so the only way to get the content is to start the emulator and extract the contents from running emulator.
Recently there is an unyaffs available [1]
- As file system in emulator as no cp or tar command, we use a statically linked BusyBox cross compiled for ARM and use it inside emulator (get it from Benno or build it your own with above tool chain).
- Set path to emulator tools
export PATH=${PATH}:<path_to>/android-sdk_m5-rc14_linux-x86/tools
- Create an empty SDcard (image)
mksdcard -l card 100M card.img
- Start emulator
emulator -sdcard card.img -console -debug-kernel
- You should now see the SDK kernel booting and emulator starting. Wait until the emulator is ready, then send the ARM busybox from the host into the simulated environment:
adb -d 1 push busybox /data/busybox
- Inside emulation, set tar (and bzip2) links to busybox, tar /system and /data directories to sdcard.
- Shutdown emulator, mount card.img
mount -o loop card.img mnt/
and get the images of system and user data.
- If you look at the extracted size of the userdata image, the extracted one is bigger than the original userdata.img. So by the runtime extraction we get some temporary junk in it. For this, untar extracted userdata and remove a least some of the unnecessary stuff:
- Remove all content of data/dalvik-cache/. It holds the decompressed files from the apk packages.
- Remove the static busybox image. We only needed it for extraction and don't need it any more.
Note: Anybody likes to hack this unyaffs tool? Then the system.img and userdata.img extraction would be a lot easier.
Note: A user reports that he doesn't use the extracted data directory at all. He simply mounts a tempfs to /data as it seems that Android runtime creates most (all?) of the necessary files in /data itself at runtime.
Extracted binaries
At some locations there are ready made binaries available. The advantage of this is that you don't have to extract the binaries yourself. The disadvantage is that you can't always be sure that the images contain everything you need and that the images match your kernel patch (see above) version.
- Android file system images, as of date of Benno's article most probably based on m3-rc20.
Note: Some guys on OMAP mailing list have Android binaries extracted (currently from m5-rc14) and are willing to share them. Unfortunately they don't have any permanent web storage yet (~30MB). If you have and like to help community with providing some web space, contact OMAP list.
This section describes how to configure the software (kernel, file system) to run Android on real hardware target. Before you do this Android specific steps, you should make sure that everything works without any Android specifics. I.e. make sure that the (EABI) kernel boots, you can access all file systems (e.g. NFS or MMC or NOR or NAND etc.) and necessary drivers (e.g. keyboard, touchscreen etc.). Do this with booting into your normal (EABI) file system you always use. We later switch to Android file system then.
Kernel configuration
Make sure your kernel boots normally on your board. Then enable some Android specific configuration (needs kernel patch extracted above) and make sure that your kernel still boots (with your standard file system).
Note: Some of these settings are valid only for m5-rc14 and newer (?) (Binder config, /sys/android_power output) as it changed from older versions to m5-rc14.
CONFIG_AEABI=y # CONFIG_OABI_COMPAT is not set
Android drivers
# # Android # # CONFIG_ANDROID_GADGET is not set # CONFIG_ANDROID_RAM_CONSOLE is not set CONFIG_ANDROID_POWER=y CONFIG_ANDROID_POWER_STAT=y CONFIG_ANDROID_LOGGER=y # CONFIG_ANDROID_TIMED_GPIO is not set CONFIG_ANDROID_BINDER_IPC=y #AshMem CONFIG_ASHMEM=y
After you successfully booted the kernel with configuration above (and m5-rc14 kernel patch), make sure you have following /sys files:
/sys/android_power/acquire_partial_wake_lock /sys/android_power/acquire_full_wake_lock /sys/android_power/last_user_activity /sys/android_power/request_sleep /sys/android_power/acquire_full_wake_lock /sys/android_power/acquire_partial_wake_lock /sys/android_power/battery_level /sys/android_power/battery_level_low /sys/android_power/battery_level_raw /sys/android_power/battery_level_scale /sys/android_power/battery_low_level /sys/android_power/battery_shutdown_level /sys/android_power/charging_state /sys/android_power/release_wake_lock /sys/android_power/request_state /sys/android_power/state
File system configuration
We now switch to Android file system extracted above. This should be established on a device with enough space (> ~64MB) and which is accessible on your target. Options are e.g. NFS, NOR or NAND file system, hard disk or USB storage. In a first step it is sufficient if you are able to manually mount it from your (temporary) standard root file system. In a second step it is an option to use it directly as root fs.
The Android file system we establish here on one of the the storage from above is built from four parts:
- Content of system data image extracted above
- Content of user data image extracted above (make sure temporary files are removed)
- Content of Android ram disk image
- Device file system
To create Android file system, take (empty) storage you selected and start with ram disk:
Android ram disk image can be found as ramdisk.img in tools/lib/images of Android SDK. This is a gziped cpio archive:
cp ramdisk.img ramdisk.gz gunzip ramdisk.gz cd target_fs cpio -iv < ../ramdisk
Result of this should be an root file system tree with:
data dev etc init proc sbin sys system tmp var
Directories data, dev and system are empty. Extract content of extracted user data image to /data and system image to /system directories. E.g.
tar xvfj ../system_m5_rc14.tar.bz2 system/ tar xvfj ../userdata_m5_rc14.tar.bz2 data/
Note: This depends on how you named and stored extracted user data and system image above.
Last step is to create some device nodes in /dev you need for running from this Android file system. There are several options how to establish this. One option is to extract device file system from running Android emulator as well. Second option is to use the same device file system you normally use in your standard file system. Choose the easiest way. If you did this, make sure you have Android specific device nodes with correct major/minor numbers as well.
Note: Copying device nodes the best way is to tar them at source and untar them then at target. For device nodes, cp command isn't the best option due to special device node format.
Start up
Starting Android using the file system and kernel created above, there are three ways:
- Directly boot from Android kernel into the Android file system. I.e. let the Android kernel directly start init etc. from Android file system.
- First boot from Android kernel into your standard file system. Then "manually" switch over to Android file system and start Android. This "manual" switch can be done using some scripts.
- The third way is a mix of the first two ways: Boot into a standard non-Android file system, then switch over to Android but there directly execute init as it would be done by root file system.
Android root file system
There are several ways to directly start Android from (root) file system created above:
- Directly point your kernel to /init in Android file system. Then kernel will use Android's init as init program and execute it without any manual interaction
- Use Android's shell and give kernel /system/bin/sh as init program. Then start Android's init manually (/init&) .
Start via scripts
This section describes the second way to start Android. First boot into your normal file system and then switch to Android file system and start Android "manually", i.e. with help of some scripts. From the initial description of this method, this way is also known as the a.sh way (search for a.sh). The scripts used for this depend on your local configuration. You can take below scripts as example and adapt them for your local use.
These example scripts are used to first boot into standard root file system (e.g. JFFS2 in NOR) and then to mount (/mnt/usb) and start Android located on an ext2 formatted USB stick.
start_android.sh in standard root file system:
#!/bin/sh -x echo "Starting Android..." fsck.ext2 -pv /dev/sda1 mount /dev/sda1 /mnt/usb rm -f /mnt/usb/tmp/* umount /proc umount /sys mount -t proc proc /mnt/usb/proc mount -t sysfs sysfs /mnt/usb/sys umask 000 chroot /mnt/usb/a.sh
a.sh to start Android at Android file system:
#!/system/bin/sh -x export PATH=/sbin:/system/sbin:/system/bin:$PATH export LD_LIBRARY_PATH=/system/lib export ANDROID_ROOT=/system export ANDROID_ASSETS=/system/app export ANDROID_DATA=/data export EXTERNAL_STORAGE=/sdcard export DRM_CONTENT=/data/drm/content /system/bin/app_process -Xzygote /system/bin --zygote & /system/bin/dbus-daemon --system & runtime & /system/bin/sh
- fsck.ext2 -pv /dev/sda1: Make sure ext2 file system is clean. ext2 doesn't like unclean switch off while debugging Android start up ;)
- rm -f /mnt/usb/tmp/*: Remove Android temporary files before starting Android.
- mount proc and mount sys: This has to be done somewhere. Depending on your scripts, you can do it in a.sh as well.
- runtime: For debugging use here /system/bin/strace -f -ff -tt -s 200 runtime&.
- Starting runtime in background (&) and calling /system/bin/sh afterwards is optional. It gives you the option to have a shell at Android startup to e.g. observe /proc/meminfo, top or ps. Only useful if strace isn't enabled or not so noisy ;)
Start init via scripts
This third way is a mixture of the first two ways: Boot into a standard non-Android file system, then switch over to Android but there directly execute init as it would be done by root file system.
From standard non-Android file system this switch can look like:
mount /dev/sda1 /mnt/usb rm -f /mnt/usb/tmp/* umask 000 chroot /mnt/usb /init
- Strace: The main debugging help currently known is strace. Again, a statically linked one is used.
- You should invoke strace with -f -ff -tt -s 200 options, e.g.
strace -f -ff -tt -s 200 /system/bin/runtime
Kernel patch
Q: Above section about kernel patch extraction mentioned that not all changes in Android kernel compared to stock kernel are needed for Android on real HW (e.g. Goldfish, QEMU and YAFFS2 related changes). What exactly do I need?
A: Regarding m5-rc14 and kernel 2.6.23 the (changed) files below seem to be sufficient to run Android on real HW:
arch/arm/Kconfig arch/arm/kernel/process.c arch/arm/kernel/signal.c drivers/android/alarm.c drivers/android/android_gadget.c drivers/android/android_kernel_debug.c drivers/android/android_kernel_debug.h drivers/android/binder.c drivers/android/Kconfig drivers/android/logger.c drivers/android/Makefile drivers/android/power.c drivers/android/ram_console.c drivers/android/timed_gpio.c drivers/input/evdev.c drivers/Kconfig drivers/misc/Kconfig drivers/misc/lowmemorykiller/lowmemorykiller.c drivers/misc/lowmemorykiller/Makefile drivers/misc/Makefile fs/inotify_user.c include/linux/android_alarm.h include/linux/android_gadget.h include/linux/android_power.h include/linux/android_timed_gpio.h include/linux/binder_module.h include/linux/binder_type_constants.h include/linux/logger.h kernel/power/process.c drivers/Makefile
Kernel patches to run android on n8x0 here.
Q: When I extract the kernel patch, I additionally get a drivers/binder/ directory. Why isn't it listed/needed above?
A: The drivers/binder/ directory seems to contain OpenBinder. In Android m5-rc14 this seems to be replaced by drivers/android/binder.c. Therefore we don't need drivers/binder/ with m5-rc14 any more. Note that new binder.c in drivers/android is configured with CONFIG_ANDROID_BINDER_IPC, while drivers/binder was configured by (obsolete) CONFIG_BINDER.
Devices nodes
Q: Do I need special devices nodes? Which?
A: Above we only extracted system and userdata image. If you like, you can extract /dev entries as well. However, starting Android's runtime under strace control should give you a list which devices will be opened. Besides the standard ones you will need (incomplete?):
crw-rw-rw- 1 root root 10, x Jan 1 00:00 binder crw-rw-rw- 1 root root 10, x Jan 1 00:00 log/radio crw-rw-rw- 1 root root 10, x Jan 1 00:00 log/events crw-rw-rw- 1 root root 10, x Jan 1 00:00 log/main crw-rw-rw- 1 root root 10, x Jan 1 00:00 alarm crw-rw-rw- 1 root root 10, x Jan 1 00:00 eac crw-rw-rw- 1 root root 29, 0 Jan 1 00:00 graphics/fb0 more ?
/dev/xxx minor numbers
Q: Which minor number will I need for /dev/xxx entries above? E.g. for /dev/binder?
A: The major number 10 (major number for "misc" devices) above are for new drivers of m5-rc14. The minor numbers would be as given by cat /proc/misc. They are somehow board dependent and may change.
E.g. in m5-rc14 emulator you may get:
# cat /proc/misc 58 binder 59 log_radio 60 log_events 61 log_main 62 alarm 1 psaux 63 eac
With kernel patch on real HW you may get:
# cat /proc/misc 59 binder 60 log_radio 61 log_events 62 log_main 63 alarm
Q: I have /dev/fb0, is this correct?
A: With m5-rc14 Google switched frame buffer interface to /dev/graphics/fb0. So you need:
crw-rw-rw- 1 root root 29, 0 Jan 1 00:00 /dev/graphics/fb0
Blank screen
Q: I did all steps like above, strace output doesn't show any obvious errors, but if I start Android calling runtime I simply get a blank screen. No output (no ANDROID string, no red cycle eye, nothing), just blank screen. As when the frame buffer screen saver starts after ~10min. I use m5-rc14.
A: With m5-rc14 the frame buffer handling changed. You now need a frame buffer driver which supports double buffer/page flipping. Observe the output of strace. If you get:
... writev(4, [{"\4", 1}, {"SurfaceFlinger\", 15}, {"Client API: OpenGL ES\", 22}], 3) = 38 open("/dev/graphics/fb0", O_RDWR|O_LARGEFILE) = 21 ioctl(21, FBIOGET_FSCREENINFO, 0x43145d9c) = 0 ioctl(21, FBIOGET_VSCREENINFO, 0x43145cfc) = 0 ioctl(21, FBIOPUT_VSCREENINFO, 0x43145cfc) = 0 writev(4, [{"\5", 1}, {"EGLDisplaySurface\", 18}, {"page flipping not supported (yres_virtual=640, requested=1280)\", 63}], 3) = 82 ioctl(21, FBIOGET_VSCREENINFO, 0x43145cfc) = 0 ...
your frame buffer driver doesn't support page flipping.
Note: For above output, strace has to be invoked with -f -ff -tt -s 200 options, else you wouldn't see this.
Page flipping frame buffer
Q: Okay, I get this page flipping not supported message above and have a blank screen. So my frame buffer driver doesn't support double buffer/page flipping. What do I have to change in frame buffer driver to support double buffer/page flipping?
A: This depends on frame buffer driver.
- For OMAP you can try following hack:
Index: linux-omap-2_6_23/drivers/video/omap/omapfb_main.c =================================================================== --- linux-omap-2_6_23.orig/drivers/video/omap/omapfb_main.c +++ linux-omap-2_6_23/drivers/video/omap/omapfb_main.c @@ -168,7 +168,7 @@ static int ctrl_init(struct omapfb_devic /* 12 bpp is packed in 16 bits */ if (bpp == 12) bpp = 16; - def_size = def_vxres * def_vyres * bpp / 8; + def_size = def_vxres * def_vyres * 2 * bpp / 8; fbdev->mem_desc.region_cnt = 1; fbdev->mem_desc.region[0].size = PAGE_ALIGN(def_size); } @@ -415,6 +415,7 @@ static void set_fb_fix(struct fb_info *f } fix->accel = FB_ACCEL_OMAP1610; fix->line_length = var->xres_virtual * bpp / 8; + fix->ypanstep = 1; } static int set_color_mode(struct omapfb_plane_struct *plane, @@ -1471,7 +1472,7 @@ static int fbinfo_init(struct omapfb_dev var->xres = def_vxres; var->yres = def_vyres; var->xres_virtual = def_vxres; - var->yres_virtual = def_vyres; + var->yres_virtual = def_vyres * 2; var->rotate = def_rotate; var->bits_per_pixel = fbdev->panel->bpp;
(anybody with clean patch? ->contact)
- For the new omap2 dss driver (based on 2.6.29), please try following hack:
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c index 1042c3b..8f87b78 100644 --- a/drivers/video/omap2/omapfb/omapfb-main.c +++ b/drivers/video/omap2/omapfb/omapfb-main.c @@ -1315,7 +1315,7 @@ static int omapfb_alloc_fbmem_display(struct fb_info *fbi, unsigned long size, oldw, oldh, w, h); } - size = w * h * bytespp; + size = w * h * bytespp * 2; } if (!size) @@ -1648,7 +1648,7 @@ int omapfb_fb_init(struct omapfb2_device *fbdev, struct fb_info *fbi) } var->xres_virtual = var->xres; - var->yres_virtual = var->yres; + var->yres_virtual = var->yres * 2; if (!var->bits_per_pixel) { switch (display->get_recommended_bpp(display)) { @@ -1669,7 +1669,7 @@ int omapfb_fb_init(struct omapfb2_device *fbdev, struct fb_info *fbi) var->xres = 320; var->yres = 240; var->xres_virtual = var->xres; - var->yres_virtual = var->yres; + var->yres_virtual = var->yres * 2; if (!var->bits_per_pixel) var->bits_per_pixel = 16; }
Android start crashes
Q: When I start Android like described above, xxx strangely crashes and/or I get strange error messages. I don't use recent (m5-rc14) Android.
A: Make sure that you use kernel patch and file system from most recent Android release (currently m5-rc14). Don't mix kernel patch and file system from different versions.
Power management
Q: I did anything like described above. Systems starts properly, I get Android home screen. But then, system goes to suspend mode and never wakes up. Even if I only use fake Android power management.
A: unknown yet :( There is some guessing and some workaround.
- Some guess from androidzaurus.
- Workaround reported from Anil:
Adding keypad support (e.g. on Mistral's OSK2530EVM, OMAP2430 based platform) and "waking" Android while it switches to suspend wakes it again. When Android goes into power saving mode, it prints the following messages
android_power_suspend: enter suspend android_power_suspend: exit suspend, ret = -38 android_power_suspend: pm_suspend returned with no event
And then, if the UP or DOWN key is pressed on the HW keypad, the system comes back to normal mode and resumes activity with the below given console messages
android_power_wakeup 2->0 at 447592867845 active wake lock PowerManagerService active wake lock KeyEvents android_power_suspend: done
TLS issue
Q: What is this TLS issue?
A: Some newer ARM processors support TLS in hardware. With current (m5-rc14) Android release this isn't supported yet.
TLS issue and processors
Q: Which processors have this TLS issue?
A: ARMv6K (MPCORE) and ARMv7 (Cortex). Regarding OMAP, this is OMAP3 (Cortex). OMAP1 (ARM9) and OMAP2 (ARM11) don't have this issue.
TLS issue workaround
Q: I'd like to use (m5-rc14) Android on processors with TLS issue, what can I do?
A: On older ARM's the TLS register is emulated (trapped by the kernel) and on newer ARM's the register actually exists. Android (at least the version for Goldfish) is compiled with the assumption that the TLS register is emulated and thus expects the kernel to trap it. A non-user defined config option called HAS_TLS_REG is set based on the processor version that is configured which controls if the trap code gets added to the kernel. So to get around the TLS issue, you will need to force the option ON even if the processor supports the TLS register. You can force it on for e.g. OMAP3 by doing the following. However, once source is available, you really don't want to do this as it does cause a performance hit.
diff -Naur 2.6_kernel-orig/arch/arm/mm/Kconfig 2.6_kernel-android/arch/arm/mm/Kconfig --- 2.6_kernel-orig/arch/arm/mm/Kconfig 2007-11-20 12:09:42.000000000-0600 +++ 2.6_kernel-new/arch/arm/mm/Kconfig 2007-12-08 22:23:04.000000000-0600 @@ -675,7 +675,7 @@ config HAS_TLS_REG bool depends on !TLS_REG_EMUL - default y if SMP || CPU_32v7 + default y if SMP || CPU_32v7 && !ARCH_OMAP help This selects support for the CP15 thread register. It is defined to be available on some ARMv6 processors (including
(Thanks to Keith Deacon!)
Note: A user report wasn't quite successful regarding this.
Red cycle eye runtime speed
Q: The red cycle eye runs very fast on my board, and the system_server take almost 100% CPU
A: This is usually indicative of lack of vsync/pageflip in the fb driver. The surfaceflinger believes it will be limited by the vsync rate and the startup animation depends on that.
File not found
Q: At Android start up I get some File not found ... error messages like:
Prepping: /system/app/AlarmClock.apk:/system/app/AlarmProvider.apk:... File not found: /system/app/AlarmClock.apk File not found: /system/app/AlarmProvider.apk File not found: /system/app/Anagrams.apk ... File not found: /system/app/Vending.apk File not found: /system/app/VoiceDialer.apk File not found: /system/app/Voicemail.apk File not found: /system/app/YouTube.apk Prep complete
Do I have to care about these?
A: No, it doesn't seem so. See Benno's blog, section Manual startup.
Limited main memory
Q: I have only limited main memory (SDRAM, e.g. 32MB). The system basically starts, but it is really sssllllooooowwww, slightly unusable. More or less only a proof of concept. Can I do anything to use Android even on systems with limited main memory?
A: Try to enable lowmemorykiller:
For this, in kernel enable
in Device drivers -> Misc devices. At Android startup this then results in messages like
... send sigkill to 920 (app_process), adj 1, size 1838 ...
Some buttons work, some not
Q: Some buttons work, some buttons don't work ... wrong mapping. How to see what key codes certain buttons are bound? And how to edit the mapping in Android?
A: From Brian at OMAP ML:
There's a brute force approach to sorting out input events: run getevent on the emulator and on the target hardware and compare the results. It's in /system/bin. Keylayouts live in /system/usr/keylayout/*.kl and are used to translate from the raw input event codes to android keycodes. Keymaps live in /system/user/keychars/*.kcm.bin (undocumented binary format right now, sorry) and are used to describe how the key events and modifiers and such are related.
Filesystem, JFFS2 and SIGSEGV
Q: Which file system should I use to store Android user files? Is JFFS2 okay? I use JFFS2 and get SIGSEGVs. What can I do?
A: Don't use JFFS2 as file system for Android. Android does not support JFFS. Use an ext2/3 formatted medium. Or use YAFFS2 if you use a NAND device (as emulator does).
Using JFFS2
Q: Okay, I understand from above that Android doesn't support JFFS2. But, maybe there is a hack to try?
A: You could try what Brian reports:
Using JFFS2, what you're might seeing here is the property service in init failing to create and mmap it's arena, which it tries to do in /, which in emulator world is initramfs. The android init/boot model is a little different in that android don't pivot over to a root filesystem, android mounts the system, data, etc partitions under the ramfs on /.
You might be able to hack around this by editing the string "/system_properties" to "/tmp/em_properties" or something like that, assuming you have tmpfs mounted on /tmp.
Nokia N8x0 and Android SDK
Q: I'd like to run Android on Nokia N8x0 (link 1, link 2). Which Android SDK should I use? Can I use m5-rc14/15 SDK?
A: You have to use m3 user space. This works well with m5-rc14/15 kernel patches. So best combination is to use m3 user space with m5 kernel.
m5 user space will not work, because it needs page flipping frame buffer and N8x0 fb driver doesn't support this.
For working android port: "Nitdroid"
N8x0 and recent OMAP git kernel
Q: I'd like to use recent OMAP git kernel on N8x0. What do I need to run git kernel on N8x0?
A: Have a look to Tony's booting nokia N8x0 with current OMAP git kernel.
N810 keys
Q: How do I get the N810 keyboard to work with Android?
A: Try the following changes to get most of N810 keys working with Android, except Fn and the numbers:
Just update one file: /system/usr/keylayout/qwerty.kl -key 158 BACK WAKE_DROPPED +key 1 BACK WAKE_DROPPED key 230 SOFT_RIGHT WAKE key 60 SOFT_RIGHT WAKE key 107 ENDCALL WAKE_DROPPED key 62 ENDCALL WAKE_DROPPED -key 229 SOFT_LEFT WAKE_DROPPED +key 62 SOFT_LEFT WAKE_DROPPED key 59 SOFT_LEFT WAKE_DROPPED key 139 SOFT_LEFT WAKE_DROPPED key 228 POUND key 227 STAR key 231 CALL WAKE_DROPPED key 61 CALL WAKE_DROPPED -key 232 DPAD_CENTER WAKE_DROPPED +key 96 DPAD_CENTER WAKE_DROPPED key 108 DPAD_DOWN WAKE_DROPPED key 103 DPAD_UP WAKE_DROPPED -key 102 HOME WAKE +key 63 HOME WAKE key 105 DPAD_LEFT WAKE_DROPPED key 106 DPAD_RIGHT WAKE_DROPPED -key 115 VOLUME_UP -key 114 VOLUME_DOWN +key 65 VOLUME_UP +key 66 VOLUME_DOWN
N8x0 touchscreen
Q: Is there any way to get N8x0 touchscreen working with Android?
A: Yes. There is a patch you can apply to a nokia+android patched 2.6.21 kernel and you should have a working touchscreen.
Nokia770 support
NITdroid project provide some images to flash on your n700, see tutorial and demo at :
HW interfaces support
Q: Which hardware interfaces or kernel drivers does current Android support?
A: See discussion on OMAP ML:
> I was able to add support for the keypad, touch and network in Android, > however the interfaces like GPS, Accelerometer, vibrator, hardware 3D > acceleration, battery etc. are not integrated with Android right now. I > would appreciate if you could throw some light on these open issues. How > exactly can these interfaces be integrated with Android? We're trying to use the standard kernel/driver interfaces when possible, but for things that may have a good deal of variation in implementation, we're looking to provide a very thin "hardware interface library" layer to adapt between the bottom of the userspace stack and the drivers or whatnot for specific hardware platforms. We'll continue to adopt standardized kernel solutions as they become available -- We're now using the power supply framework in 2.6.24 for monitoring battery/charge state (post M5 SDK -- it'll be in the next release), for example.
- "Nitdroid" -project. Sources and precompiled (ready to use) binaries for Nokia Internet Tablets.
- Mistrals' Android Competency Center
- Android on the OMAP34x Zoom Mobile Development Kit
- Android homepage
- Bennos blog with lot of reverse engineering info about Android
- Android on Zaurus
- Korea Android Community
Note:Connect this site using http://www.google.com/translate website.
- Linux devices about Penguinistas hack Android onto real hardware
- Google Android on Working Target
- Android discussion groups. These concentrate more on Android application programming. Not really HW and processor related.
- Open Embedded Software Foundation Android forum. Discussion, support and general information about running Android on a handheld.
- Porting Android to real HW at Android internals list
- Android Porting to Real Target HW
- Android on Nokia 8xx
- Tony's booting nokia N8x0 with current OMAP git kernel
- Robert Love talks about Google Android. Recorded at LUG Radio Live USA 2008 at the Metreon Theatre, San Francisco.
- Rupesh Gujare announces availability of an Android file system image for the BeagleBoard and provides a video and kernel + root file system.
Note: Some of the infos in above links are from the first versions of Android. Seems that with newer versions (e.g. m5-rc14) some parts changed, e.g. binder interface and /sys/android_power interface.
See OMAP mailing list for more information.
This page is distilled by Dirk Behme and information added by Lim,GeunSik.
Nitdroid (Android for Nokia Internet Tablets) on Nokia n810:
(Videos above are outdated and from very early stage)
NITdroid on nokia770 :
- http://www.newlc.com/en/nitdroid-demo-gnulinux-android-nokia-n770-0
- Android Donut Demo on Mistral's TMDSEVM3530
- Android Demo on Mistral's TMDXEVM3503
- Download Android Demo on Mistral's TMDSEVM3530 & TMDXEVM3503
- Android m5-rc14 home screen with kernel 2.6.23 on OMAP5912 OSK:
- Android m5-rc14 kernel + m3 image, on a Nokia N810:
- Android m5-rc15 home screen with kernel 2.6.18 on armadillo-500 1136 (YouTube Movie)
- Android m5-rc14 home screen with kernel 2.6.19 on OMAP2430 OSK:
-If you have unstable sdcard, You will meet for Looping of "Red Eye" Status.
- Android camera application using V4L2 APIs, on TI OMAP EVM board:
- Android m5-rc14(2.6.23) on Nokia's n810 Tablet
- Android Cupcake Ver 1.0(2.6.27) on OMAP3EVM(ARM Cortex-A8)
- NITdroid on nokia770 :
[[3]] (larger images in tutorial above)


text: Looking for a truly original way to say what's on your mind or in your heart? We've got just the gift! Each Artisan's Special Bouquet is beautifully hand-arranged in a glass vase by one of our skilled expert floral techs so that it's completely unique, and a great value at any size. Our techs put their passion and creativity into your gift, using only the freshest flowers available. Let us craft a special arrangement for you today!

subset: commoncrawl


text:
Become a subscriber and access all of these great features:
We're always adding new content. Check back soon for updates.
To start chatting with other HIDIVE viewers, please update your profile settings.
Please sign in to the primary account in order to make subscription changes.
We've partnered with Sentai Filmworks so you can shop for Blu-rays, premium box sets, merchandise, and stuff. Don't worry: their store will open in a new tab.


text:
Before we are able to finish the request for Toyota Innova, we need to get some additional information. If you are satisfied with the quote, you can pay on next page.
Notice: You may also receive quotes from other companies offering SUV services, after you send this request.
See other SUV vehicles in Quezon City, Metro Manila
To reserve this Toyota Innova, you only need to pay PHP 250. The remaining amount you can pay to the driver upon pick-up.
Your contact and personal info will not be shared to the vendor, until you choose to do so. We respect your privacy!
Or, if you remember your current password, just enter it here and hit "Check status" again.
Forgot password?


text:
What We Offer
Our Contractors performs
- Kitchen Remodeling
- Bathroom Remodeling
- General Home Remodeling Oxnard Shores
- Home & Room Additions Oxnard Shores
- New Construction
We Services Oxnard Shores Zip Codes:
General Contractors Oxnard Shores, CA
Since we started our contacting business many years ago with have enjoyed growing the business to the point where we are situated right here in Oxnard Shores. Our general contractors in Oxnard Shores focus on all aspects of remodeling work. We work with renovating homes and apartments and also adding on room additions and home additions.
If you have been looking for a good, reliable kitchen contractor here in Oxnard Shores then you are in luck because we are all of the above and more. Our kitchen contractors pride themselves on being up to date with the latest designs and know how to get the most out of a kitchen space. They have worked on kitchen remodels that have been in the hundreds of thousands of dollars and projects that are in the thousands of dollars. They have worked with all budgets and they are familiar with every kitchen cabinet manufacture out there as well as tile stores and kitchen surface manufactures. Their aim is to install you your dream kitchen. They will take care of everything and keep you updated on a daily basis of what's been done to make sure you are happy with their progress.
Our bathroom contractors in Oxnard Shores share the same principles as our kitchen remodelers. They work hard while causing minimum disruption to your daily life. They are experts with installing tile and bathroom fixtures and giving you your perfect walk in shower or steam shower or even deluxe Jacuzzi tub. We have the expertise to install anything you desire.
If you need a home addition added in your house in the city of Oxnard Shores then you are in luck. Not only have our contractors been building add-ons to homes for about two decades now we know how to match up the home addition to your current property so it cohesively blends in and does not stick out like a sore thumb. We have designers and planners who will make sure the work gets done without a hitch.
We really looking forward to chatting to you here at UAC Contractors Oxnard Shores, call us and we can have one of our general contractors come out and meet you. They will be happy to talk about your next construction project.


text:
Behavior Analysis and Safety Improvement Categories (BASICs)
The Safety Measurement System (SMS) categorizes motor carrier on-road safety performance into seven BASICs. SMS is used to identify unsafe carriers, prioritize them for interventions, and monitor changes in compliance.
To get details, or view the SMS website
U.S. DOT# 2215743 is a Broker at the time of the last SMS update.
BASIC Status (Public Property Carrier View)
Based on a 24-month record ending February 23, 2024


text:
adidas collects date of birth to comply with the Privacy Policy
I consent to adidas Australia Pty Ltd. using my personal data for marketing and opinion research purposes. This includes analysing my overall interactions with adidas (such as my shopping history, use of apps, social media and personal data I share with adidas) in order to send me personalised commercial messages about adidas products. adidas may contact me through email, SMS, regular email, apps or though other communication channels provided by me. What does this mean?
You will receive a confirmation to
For all orders exceeding a value of $100, shipping is offered for free.
Otherwise, a standard fee of $8.50 is charged.
Check out our delivery Terms & Conditions for more details.
Try it on at home. Not the right size or colour? No problem. Return for free within 30 days.
If you need help re-purchasing, please contact our customer service team here.
Please be aware that our change of mind returns are not available on Yeezy products. However, this does not affect your rights under the consumer guarantees which apply under the Australian Consumer Law.
Check out our Return Policy for more details.
(102 Products)
Your Selection


text:
Panda How to kernel new
The information posted below is atm outdated. A really nicer version was already done by km and can be found here PandaBoard#How_To.27s
This page is still a work in progress,--- km..3/3/2011
There have been few changes between 2.6.38-rc3 and -rc4, -rc5, and -rc6 that effect the pandaboard, but -rc7 has some changes on arch/omap2. More omap related changes are being pushed into mainline during each release, so this page will be updated every -rcx release to at least note any build or .config issues.
- There have been no changes that affect the Pandaboard (directly) in -rc5 and -rc6, but there have been some regressions in the mainline code, so we'll skip 2.6.38-rc5 and -rc6.
-Kernel building for kernel 2.6.38-rc3, 2.6.38-rc4 and 2.6.38-rc7.
Newer kernels require that you use a more recent MLO (x-loader) and u-boot than described in previous How-To's.
You can build these from source, or try to find binaries. One issue with the binary route is that you might want to alter the kernel command line embedded inside u-boot. Such as for experimenting with different partition formats, or different filesystem types (ext3 vs ext2), etc. Of course you could stop the autoboot and type it in yourself, but we will build from source.
For this How-to, we will use the Code Sourcery G++ version arm-2009q3. It should already be installed on your system. Kernels have also been successfully built with arm-2010q1.
First, let's get the x-loader source code and build it.
git clone git://gitorious.org/x-loader/x-loader.git
cd to the x-loader directory
Then using git or gitk make and check out a new branch at the commit "6f3a261 omap1: remove support for 1710 and 1510"
Next, select the panda config:
make CROSS_COMPILE=Path_to_your/arm-2009q3/bin/arm-none-linux-gnueabi- omap4430panda_config
Now compile MLO:
make CROSS_COMPILE=Path_to_your/arm-2009q3/bin/arm-none-linux-gnueabi- ift
This should produce the MLO file in the x-loader directory.
Now for U-boot:
git clone git://git.denx.de/u-boot.git
cd to the u-boot directory
Then using git or gitk make and check out a new branch at tag: v2010.12
Next, select the panda config:
make CROSS_COMPILE=Path_to_your/arm-2009q3/bin/arm-none-linux-gnueabi- omap4_panda_config
Change ttyS2 to ttyO2 in the u-boot kernel command line in: u-boot/include/configs/omap4_panda.h
Now compile U-boot:
make USE_PRIVATE_LIBGG=yes CROSS_COMPILE=Path_to_your/arm-2009q3/bin/arm-none-linux-gnueabi-
This should produce u-boot.bin in the u-boot directory
Now for the kernel:
Either download http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.38-rc3.tar.bz2, http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.38-rc4.tar.bz2 or http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.38-rc7.tar.bz2
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
-Warning- this will be a really big download
cd to the appropriate root directory
If you downloaded the .tar.bz2 file you can dkip this step.
Using git or gitk make and check out a new branch at tag: v2.6.38-rc3, v2.6.38-rc4 or v2.6.38-rc7.
Next, select the panda config:
make ARCH=arm omap2plus_defconfig
Now compile the kernel:
make -j10 V=99 ARCH=arm CROSS_COMPILE=Path_to_your/arm-2009q3/bin/arm-none-linux-gnueabi- uImage
In these newer kernels the ttyOx serial ports are given dynamic major minor node numbers, it is important to have your rootfs use udev or mdev to figure out which ones they are.
Put the MLO, uboot.bin and uImage on your vfat partion of your SD card, insert into your trusty pandaboard and power it up. Depending on your rootfs and whether your udev/mdev is setup and working, the kernel should boot. udev/mdev problems will occur when init tries to run inittab.
Once you have the kernel booting, go back and
make ARCH=arm menuconfig
and turn on the usb networking, EHCI and whatever else you might want to play with, then rebuild the kernel.
Or, just use this config config.2.6.38-rc3 as it has only the changes needed for the pandaboard's usb networking and EHCI.
-Note- this config works for 2.6.38-rc4 and -rc7 as well. Just remember to run make ARCH=arm oldconfig to update things that were changed in the new -rcx.
USB and ethernet work, but hdmi video does not as of 2/2/2011.
Here is what should come out the serial port during bootup (followed up by my testing of the ethernet): http://paste.ubuntu.com/561130/
Of course that is my rootfs, which was built here: http://elinux.org/Panda_How_to_buildroot
With the sysinit part of inittab looking like this:
# Startup the system ::sysinit:/bin/mount -t proc proc /proc ::sysinit:/bin/mount -o remount,rw / ::sysinit:/bin/mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev ::sysinit:/bin/mkdir /dev/pts ::sysinit:/bin/mount -t devpts devpts /dev/pts ::sysinit:/bin/mknod -m 660 /dev/console c 5 1 ::sysinit:/bin/mknod -m 660 /dev/null c 1 3 ::sysinit:/bin/mount -t sysfs sysfs /sys null::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug null::sysinit:/sbin/mdev -s null::sysinit:/bin/mount -a null::sysinit:/bin/hostname -F /etc/hostname # now run any rc scripts ::sysinit:/etc/init.d/rcS


text:
BeagleBoard Hardware Interfacing
This page is meant to help anyone who wants to create an expansion board to interface with the BeagleBoard. It summarizes some of the commercial options, and includes some recommendations for components for a custom board.
Commercial Options
There are several commercial boards that may work without the need to create a custom board.
A few more options can be found here.
General Notes
It is very important to remember that the I/O on the BeagleBoard is 1.8V. Level shifting must occur to interface with 3.3V or 5V devices. This is very important as these voltages will easily break pins on the BeagleBoard.
Powering the Beagle
The BeagleBoard is typically powered through the barrel connector or the MiniUSB connector. When adding an expansion board, the option is available to power the BeagleBoard from a power supply on that expansion board. The 5V pin on the expansion connector is connected to the barrel connector directly. This means that you can power the board from either one, and pass 5V through to the other. An elegant solution is to place a switcher on the expansion board to provide 5V to the BeagleBoard and any external 5V devices. This allows you to use a wide range of power supplies or wall warts while providing clean, safe 5V DC to the BeagleBoard. One simple switcher to take a look at is the TPS54x0 series (the x indicates the maximum current output; 1A, 2A, 3A, and 5A devices are available).
Expansion Connectors
There are several expansion connectors available on the BeagleBoard, depending on the revision. All revisions have J3, a 0.1" spaced header. This is not populated by default, it is left up the user to decide which gender header is desired, and where is should be placed. There have been some indications that newer versions of the BeagleBoard will come populated with a female header oriented facing downward. It may be wise to design with this decision in mind to allow for future expandability when new revisions of the BeagleBoard are released.
There are two other headers available (J4 and J5). These are 0.05" spaced headers, and are usually used only for interfacing with and external LCD. Pins and connectors are more difficult to find for these headers, so it is probably best to stick with using the main expansion header unless these signals or the additional I/O are required.
Level Shifting
There are several options for level shifting to use 3.3V or 5V devices.
The MAX3378 is a quad-input 16MBps bidirectional level shifter. It works well with I2C or GPIO. Many of the commercial expansion boards use these for level shifting. They are only available in a small TSSOP surface mount package, making it difficult to use on a breadboard or some milled boards.
Single MOSFET Bidirectional Level Shifter
See NXP's Appnote [1] for more information on this method. BSS88 and BSS138 MOSFETs appear to be compatible with the BeagleBoard and this design. This has not been tested with the BeagleBoard, so be sure to research this option fully before implementing it.
I2C Devices
Some general information about I2C and a few compatible devices can be found on Interfacing with I2C Devices. Several devices listed at the bottom of the page are confirmed to work with the BeagleBoard. Note that almost any 100kHz or 400kHz I2C device will work with the BeagleBoard, it is just a matter of determining the correct address and registers on the device to read from or write to.
PCB Tips
If you are using OrCAD to layout an expansion board, it is extremely useful to use a DXF file to align the mounting holes and the expansion headers. 0.156" holes should be used for the mounting holes. This can be done by exporting the pertinent details from the OrCAD .brd file available in the Design Documents section of the BeagleBoard site. Alternatively, a version that should be compatible with C3 and C4 can be found here: File:BeagleBoard.dxf. Make sure to check that pin 1 is aligned with pin 1 on the BeagleBoard. This will not be the case by default; a new footprint will need to be created or the connector will need to be "placed" on the bottom of the board.
If you make an expansion board using Eagle, you can import DXF or GERBER files using Eagle PCB Power Tools from Cadsoft website. It is a freeware that create a script .SCR file from your DXF or GERBER. But there is a limitation in the number of script instructions created so for importing BeagleBoard footprint you will first to select in the DXF or Gerber files what you really want.


text:
Table of Contents
Our low moisture process uses the power of oxygen to provide a thorough carpet cleaning, all while using non-toxic, environmentally friendly cleaning solutions. And Oxi Fresh knows that waiting hours and hours for carpets to dry after the commercial carpet cleaners are gone is not an option for your business – you can't drop everything for a .
About one hour after our commercial carpet cleaning, you'll be able to be back on your carpet without fear of wet shoes. In addition to our commercial carpet cleaning services, Oxi Fresh also offers upholstery, tile and grout, and sandless wood floor cleanings. Use the menu to your left to learn about any subject that interests you.
Learn More Yes. There is no charge to move furniture and we are professionally trained to move your furniture. After the cleaning is completed, we will return it to its rightful place on protective padding as needed. We do suggest you remove items off of your furniture like electronics, plants, lamps and knick-knacks.
There are several items we will not move, including: pianos, electronics, china cabinets, beds, dressers with mirrors, pool tables, etc. Learn More On average, it will take approximately 20 minutes per room. This time can vary greatly depending on the amount of furniture to be moved, how soiled the carpet is, and any necessary spot removal treatments (Commercial Restaurant Cleaning Services Danville, CA).
Learn More Dry time is affected by humidity, temperature and air flow to the area. It can take anywhere between 8-24 hours for the carpet to completely dry, depending on the aforementioned variables. Using fans in any rooms cleaned and turning your air conditioning or heating system on, depending on the time of year, can help accelerate drying time (Commercial Cleaner Service Danville, CA).
Learn More The method we use for carpet cleaning is hot water extraction, commonly referred to as steam cleaning. Stanley Steemer's exclusive hot water extraction method removes the toughest, deepest dirt safely and gently. Hot, soft water and a specially formulated cleaning solution are injected deep within the carpet fibers.
We use a process called hot water extraction to clean carpet, which is often referred to as steam cleaning because of the steam you see as we clean. We use our patented carpet cleaning machines to deep clean. These machines pump hot water into your carpet to release any dirt deep within the fibers, then extract the water and remove the dirt.
If you have more questions about our carpet cleaning process visit our carpet cleaning service page here. . Commercial Kitchen Hood Cleaning Services Near Me Danville, CA.
The store will not work correctly in the case when cookies are disabled.
Below are some of our top picks for your consideration. Professional cleaners have their own personal preferences when it comes to the best carpet cleaners. Depending upon where they are being used, some carpet cleaners may be adequate whereas other commercial carpet cleaners may not. A large office building may require a larger carpet cleaner; smaller commercial carpet cleaners would be sufficient for a smaller area.
It has an adjustable handle and an extra long cord. The Mytee carpet cleaning machine can heat water to steam quickly with its 1000W power unit. This allows it to reach 210 degrees without waiting all day. It comes with a 3-gallon solution tank where you can effortlessly remove, refill, and replace the tank.
It comes with a cleaning wand and upholstery tool. The Techtongda professional carpet cleaner can spray, rinse and dry at the same time, making cleaning more efficient. It can be used on carpets, upholstery, curtains, and other fabrics. Commercial carpet cleaners are crucial for effective office maintenance as well as maintaining hygiene within the workplace.
The best carpet cleaners come with two tanks: one for water and one for the cleaning solution. Carpet cleaners should automatically mix the solution with water, clean your carpet, and then dry it. Large tanks can be great for big shops and offices and do not require you to fill and discharge water and cleaning solutions frequently.
Your carpet cleaner should be able to dry your carpet and upholstery effectively and ward away that unpleasant wet stench. Heat also helps to increase reaction rates among cleaning chemicals, helping to dissolve, melt, and loosen soils for greater impact. Equally important is the pressure when it comes to chemicals or liquids.
Tool Rental, Prefer to Rent? Your store may have the right solution!
When a business sustains water, fire, smoke, mold or wind damage and critical operations are in jeopardy, it pays to use a restoration company with a proven track record in reducing business interruption. COIT Cleaning & Restoration Services developed the to limit the financial impact and recovery time it takes for an organization to resume operations by having a plan of action in place BEFORE you need it.
Have access to a personal account manager who will work with you during pre- & post-loss recovery. To talk with a COIT representative about the , please fill out the form below and click on the submit button. We look forward to talking with you soon!.
Commercial Cleaning Services Near Danville, CATable of Contents
Latest Posts
Professional Commercial Cleaning Services near me Martinez CA
Office Cleaning near me Oakland California
Business Carpet Cleaning near me Discovery Bay CA
All Categories
Latest Posts
Professional Commercial Cleaning Services near me Martinez CA
Office Cleaning near me Oakland California
Business Carpet Cleaning near me Discovery Bay CA


text:
Mark 1
1 The beginning of the gospel about Jesus Christ, the Son of God.
2 It is written in Isaiah the prophet: "I will send my messenger ahead of you, who will prepare your way"--
3 "a voice of one calling in the desert, 'Prepare the way for the Lord, make straight paths for him.'"
4 And so John came, baptizing in the desert region and preaching a baptism of repentance for the forgiveness of sins.
5 The whole Judean countryside and all the people of Jerusalem went out to him. Confessing their sins, they were baptized by him in the Jordan River.
6 John wore clothing made of camel's hair, with a leather belt around his waist, and he ate locusts and wild honey.
7 And this was his message: "After me will come one more powerful than I, the thongs of whose sandals I am not worthy to stoop down and untie.
8 I baptize you with water, but he will baptize you with the Holy Spirit."
9 At that time Jesus came from Nazareth in Galilee and was baptized by John in the Jordan.
10 As Jesus was coming up out of the water, he saw heaven being torn open and the Spirit descending on him like a dove.
11 And a voice came from heaven: "You are my Son, whom I love; with you I am well pleased."
12 At once the Spirit sent him out into the desert,
13 and he was in the desert forty days, being tempted by Satan. He was with the wild animals, and angels attended him.
14 After John was put in prison, Jesus went into Galilee, proclaiming the good news of God.
15 "The time has come," he said. "The kingdom of God is near. Repent and believe the good news!"
16 As Jesus walked beside the Sea of Galilee, he saw Simon and his brother Andrew casting a net into the lake, for they were fishermen.
17 "Come, follow me," Jesus said, "and I will make you fishers of men."
18 At once they left their nets and followed him.
19 When he had gone a little farther, he saw James son of Zebedee and his brother John in a boat, preparing their nets.
20 Without delay he called them, and they left their father Zebedee in the boat with the hired men and followed him.
21 They went to Capernaum, and when the Sabbath came, Jesus went into the synagogue and began to teach.
22 The people were amazed at his teaching, because he taught them as one who had authority, not as the teachers of the law.
23 Just then a man in their synagogue who was possessed by an evil spirit cried out,
24 "What do you want with us, Jesus of Nazareth? Have you come to destroy us? I know who you are--the Holy One of God!"
25 "Be quiet!" said Jesus sternly. "Come out of him!"
26 The evil spirit shook the man violently and came out of him with a shriek.
27 The people were all so amazed that they asked each other, "What is this? A new teaching--and with authority! He even gives orders to evil spirits and they obey him."
28 News about him spread quickly over the whole region of Galilee.
29 As soon as they left the synagogue, they went with James and John to the home of Simon and Andrew.
30 Simon's mother-in-law was in bed with a fever, and they told Jesus about her.
31 So he went to her, took her hand and helped her up. The fever left her and she began to wait on them.
32 That evening after sunset the people brought to Jesus all the sick and demon-possessed.
33 The whole town gathered at the door,
34 and Jesus healed many who had various diseases. He also drove out many demons, but he would not let the demons speak because they knew who he was.
35 Very early in the morning, while it was still dark, Jesus got up, left the house and went off to a solitary place, where he prayed.
36 Simon and his companions went to look for him,
37 and when they found him, they exclaimed: "Everyone is looking for you!"
38 Jesus replied, "Let us go somewhere else--to the nearby villages--so I can preach there also. That is why I have come."
39 So he traveled throughout Galilee, preaching in their synagogues and driving out demons.
40 A man with leprosy came to him and begged him on his knees, "If you are willing, you can make me clean."
41 Filled with compassion, Jesus reached out his hand and touched the man. "I am willing," he said. "Be clean!"
42 Immediately the leprosy left him and he was cured.
43 Jesus sent him away at once with a strong warning:
44 "See that you don't tell this to anyone. But go, show yourself to the priest and offer the sacrifices that Moses commanded for your cleansing, as a testimony to them."
45 Instead he went out and began to talk freely, spreading the news. As a result, Jesus could no longer enter a town openly but stayed outside in lonely places. Yet the people still came to him from everywhere.


text:
Risk Disclosure Statement
Important Information
Warning/Important note: This website contains information that is only available to qualified investors as defined below. If you are not a qualified investor, please click "I Disagree" to leave the website.
By clicking on "I agree", I declare that:
- I am a qualified investor as defined under 1
- I have read and understood the Terms and Conditions and Disclaimers as described under 2
1 – This website may only be accessed directly or indirectly by the following persons in Singapore:
1) "institutional investor" under section 304 of the Securities and Futures Act (Cap.289)("SFA"), and defined under section 4A of the SFA as:
(i) the Government; (ii) a statutory board as may be prescribed by regulations made under section 341 of the SFA; (iii) an entity that is wholly and beneficially owned, whether directly or indirectly, by a central government of a country and whose principal activity is (A) to manage its own funds; (B) to manage the funds of the central government of that country (which may include the reserves of that central government and any pension or provident fund of that country); or (C) to manage the funds (which may include the reserves of that central government and any pension or provident fund of that country) of another entity that is wholly and beneficially owned, whether directly or indirectly, by the central government of that country; (iv) any entity (A) that is wholly and beneficially owned, whether directly or indirectly, by the central government of a country; and (B) whose funds are managed by an entity mentioned in sub-paragraph (iii); (v) a central bank in a jurisdiction other than Singapore; (vi) a central government in a country other than Singapore; (vii) an agency (of a central government in a country other than Singapore) that is incorporated or established in a country other than Singapore; (viii) a multilateral agency, international organisation or supranational agency as may be prescribed by regulations made under section 341 of the SFA; (ix) a bank that is licensed under the Banking Act (Cap.19); (x) a merchant bank that is approved as a financial institution under section 28 of the Monetary Authority of Singapore Act (Cap.186); (xi) a finance company that is licensed under the Finance Companies Act (Cap.108); (xii) a company or co-operative society that is licensed under the Insurance Act (Cap.142) to carry on insurance business in Singapore; (xiii) a company licensed under the Trust Companies Act (Cap.336); (xiv) a holder of a capital markets services licence; (xv) an approved exchange; (xvi) a recognised market operator; (xvii) an approved clearing house; (xviii) a recognised clearing house; (xix) a licensed trade repository; (xx) a licensed foreign trade repository; (xxi) an approved holding company; (xxii) a Depository as defined in section 81SF of the SFA; (xxiii) an entity or a trust formed or incorporated in a jurisdiction other than Singapore, which is regulated for the carrying on of any financial activity in that jurisdiction by a public authority of that jurisdiction that exercises a function that corresponds to a regulatory function of the Authority under this Act, the Banking Act (Cap.19), the Finance Companies Act (Cap.108), the Monetary Authority of Singapore Act (Cap.186), the Insurance Act (Cap.142), the Trust Companies Act (Cap.336) or such other Act as may be prescribed by regulations made under section 341 of the SFA; (xxiv) a pension fund, or collective investment scheme, whether constituted in Singapore or elsewhere; (xxv) a person (other than an individual) who carries on the business of dealing in bonds with accredited investors or expert investors; (xxvi) the trustee of such trust as the Authority may prescribe, when acting in that capacity; or; (xxvii) such other person as the Authority may prescribe.
2) "relevant person" under section 305(1) of the SFA, and defined under section 305(5) of the SFA as:
(i) An accredited investor; (ii) a corporation the sole business of which is to hold investments and the entire share capital of which is owned by one or more individuals, each of whom is an accredited investor; (iii) a trustee of a trust the sole purpose of which is to hold investments and each beneficiary of which is an individual who is an accredited investor; (iv) an officer or equivalent person of the person making the offer (such person being an entity) or a spouse, parent, brother, sister, son or daughter of that officer or equivalent person; or (v) a spouse, parent, brother, sister, son or daughter of the person making the offer (such person being an individual).
3) any person who acquires the units (in a collective investment scheme) as principal if the offer is on terms that the units may only be required at a consideration of not less than $200,000 (or its equivalent in a foreign currency) for each transaction, whether such amount is to be paid for in cash or by exchange of units in a collective investment scheme, securities, securities-based derivatives contracts or other assets, and if the following condition is satisfied: (i) the offer is not accompanied by an advertisement making an offer or calling attention to the offer or intended offer; (ii) no selling or promotional expenses are paid or incurred in connection with the offer other than those incurred for administrative or professional services, or by way of commission or fee for services rendered by any of the persons specified in section 302C(1)(d)(i) to (v) of the SFA; and (iii) no prospectus in respect of the offer has been registered by the Authority or, where a prospectus has been registered (A) the prospectus has expired pursuant to section 299 of the SFA; or (B) the person making the offer has before making the offer 1. informed the Authority by notice in writing of its intent to make the offer in reliance on the exemption under this subsection; and 2. taken reasonable steps to inform in writing the person to whom the offer is made that the offer is made in reliance on the exemption under this subsection.
4) Or otherwise pursuant to, and in accordance with the conditions of, any other applicable provision of the SFA.
If you are not any of the types of persons described above, you are not authorised to enter this website, and you should leave this website immediately.
2 – Terms and Conditions
You acknowledge that you have read these Terms and Conditions ("Terms") prior to accessing the website located at www.incomlendcapital.com ("Website"), and you agree to be bound by the Terms. If you do not agree to all of the Terms, you are not an authorised user, and you should not use the website. The website is owned by Incomlend Capital Pte Ltd (company registration number: UEN. 201930137Z), which is licensed (license number: CMS101137) by the Monetary Authority of Singapore ("MAS") pursuant to the Securities and Futures Act (Cap.289) ("SFA") of Singapore, and is managed by Incomlend Capital Pte Ltd and/or its affiliates (collectively, as "Incomlend"). The website is intended for and should be accessed by institutional investors or accredited investors (as defined under Section 4A of the SFA) of Singapore. The website is not directed to, or intended for distribution to or use by, any person or entity who is a citizen or resident of or located in any locality, state, country or other jurisdiction where such distribution, publication, availability or use would be contrary to law or regulation or which would subject the Incomlend to any registration or licensing requirement within such jurisdiction. It is your responsibility to observe all applicable laws, rules and regulations of any relevant jurisdiction. The content contained in the website is owned by Incomlend and/or its information providers and is protected by applicable copyrights, trademarks, service marks, and/or other intellectual property rights. You may not copy, distribute, modify, post, frame or link the website, including any text, graphics, video, audio, software code, user interface, design or logos. You may not distribute, modify, transmit, reuse, repost, or use the content of the website for public or commercial use, including all text, images, audio and/or video. Incomlend may terminate your access to the website for any reason without prior notice. Neither Incomlend nor any of its associates nor any director, officer or employee accept any liability whatsoever for any loss arising directly or indirectly from the access of the website. You agree to indemnify and hold Incomlend, its associates, directors, officers or employees harmless against any and all claims, losses, liability, costs and expenses arising from your use of the website due to violation of the Terms. Incomlend reserves the right to change, modify, add or remove any parts of the Terms at any time and for any reason. The Terms shall be deemed to be effective immediately upon posting. The Terms shall be governed by, and shall be construed in accordance with, the law of Singapore.
The website has not been reviewed by the MAS. Accordingly, the website may not be accessed directly or indirectly to persons in Singapore other than (i) to an institutional investor under Section 304 of the SFA, (ii) to a relevant person pursuant to Section 305(1), or any person pursuant to Section 305(2), and in accordance with the conditions specified in Section 305, of the SFA, or (iii) otherwise pursuant to, and in accordance with the conditions of, any other applicable provision of the SFA.
Nothing in the Website constitutes tax, accounting, regulatory, legal or investment advice. The website is for informational purposes only and should not be construed as an offer to sell or an invitation to buy any securities or products, nor as investment advice or recommendation or for the purpose of soliciting any action in relation to Incomlend's businesses or solicitation by anyone in any jurisdiction in which such an offer or solicitation is not authorised or to any person to whom it is unlawful to make such an offer and solicitation. Any reproduction or distribution of information from the website, in whole or in part, or the disclosure of its contents, without the prior written consent of Incomlend, is prohibited. By accessing to the website, you agree to the foregoing.
The funds referred to in the website are for information only. It is not a recommendation or investment advice, nor does it mean the funds is suitable for all investors. The contents of the website is not reviewed by the MAS. Any decision to participate in the funds should be made only after reviewing the sections regarding investment considerations, conflicts of interest, risk factors and the relevant Singapore selling restrictions. You should consult your professional adviser if you are in doubt about the stringent restrictions applicable to the use of the website, regulatory status of the funds, applicable regulatory protection, associated risks and suitability of the funds to your objectives.
Any decisions made based on the information contained in the website are the sole responsibility of yours. Any investments made or to be made shall be with your independent analyses based on your financial situation and objectives. The investments and strategies contained in the website may not be suitable for all investors and are not guaranteed by Incomlend.
Investment involves risks and may lose value. Historical returns are provided for illustrative purposes only and do not necessarily reflect Incomlend's expectations for the future. The value of your investments may fluctuate. Past performance is no indication of current or future performance. The website may contain projections or other forward-looking statements regarding future events or future financial performance of countries, markets or companies, and such projection or forecast is not indicative of the future. The information contained in the website, including any data, projections and underlying assumptions, are based upon certain assumptions, management forecasts and analysis of information available on an "as is" basis and without warranties of any kind, whether express or implied, and reflects prevailing conditions and Incomlend's views as of the date published or indicated, and maybe superseded by subsequent events or for other reasons. The information contained on the website are accordingly subject to change at any time without notice, and Incomlend are under no obligation to notify you of any of these changes. Incomlend expressly disclaims all liability for errors and omissions in the information presented on the website and for the use or interpretation by others of information contained in the website.
Incomlend Capital Pte Ltd holds a capital markets services licence for fund management issued by the MAS and is subject to certain clientele restrictions under such licence. An investment will involve a high degree of risk, and you should consider carefully whether an investment is suitable for you.


text:
Steel Panther
Steel Panther are coming back to San Antonio, May 18th at the Aztec Theatre!
Sign up below to be added to our mailing list for the latest news updates, access to exclusive contests, and more!
Everything you love about kissrocks.com and more! Tap on any of the buttons below to download our app.
Enable our Skill today to listen live at home on your Alexa Devices!
You may be offline. Please check your connection and try again using the Retry button.


text:
Sorry, the page you were looking for could not be found. Please check the address and try again, or take a look at the site map.
If you have any further problems please get in touch.
For more information on what cookies are and how you can manage and remove them click here.


text:
WASHINGTON—Senator Benjamin L. Cardin (D-MD), Chairman of the Commission on Security and Cooperation in Europe, and Co-Chairman Congressman Alcee L. Hastings (D-FL), announced today they will hold a hearing:
"The Western Balkans: Developments in 2010 and Hopes for the Future"
Wednesday, December 8, 2010
11:00 a.m.
Room: SVC 202/203 (Capitol Visitor Center)
The countries of the Western Balkans – Albania, Bosnia-Herzegovina, Croatia, Kosovo, Macedonia, Montenegro and Serbia have all seen some progress in the last year but continue to face a wide range of challenges to their aspirations for European and Euro-Atlantic integration. These challenges often result from the still incomplete transition to effective democratic governance and adherence to the rule-of-law at home, but they also manifest themselves in inter-state disputes as well as the lingering legacy of the extreme nationalism that brought conflict to the region almost 20 years ago. Developments in 2010 regarding Bosnia and Kosovo, the countries of greatest international concern, have created opportunities for 2011, but the failure to meet expectations could produce additional instability. Meanwhile, the other countries hope to build their momentum moving toward Europe and could face new problems of their own if integration seems an increasingly distant target. This hearing will continue the Helsinki Commission's ongoing monitoring of developments in the Western Balkans by focusing on the continued U.S. role in working with the European Union and other countries with interests in the region to encourage further progress in the year ahead.
The following witness is scheduled to testify:
Thomas M. Countryman, Deputy Assistant Secretary for European and Eurasian Affairs, U.S. Department of State