转: Linux on ARM powered Devices

原文:

http://bitkistl.blogspot.com/2013/02/linux-on-arm-powered-devices.html

 

This post should give an overview on which ARM powered devices GNU/Linux runs and also gives a hint how good it is supported on the respective device. Also Android runs a Linux kernel but does not give a general purpose computing experience to the user and does not host GNU tools.

Here is a list of boards and devices which are affordable for
the home user – devices for industrial use tend to be just too expensive.

Debian GNU/Linux on NAS Devices and the Plug Computer

http://www.cyrius.com/      Get more infos here

Mostly based on Marvells Orion and Kirkwood platform.
Debian has a long history on NAS devices e.g. from QNAP
and is stable and good supported. Also the popular but discontinued
NSLU2 device runs perfectly Debian and other Linux Distributions.

Debian GNU/Linux on the Raspberry Pi     ARM11

The main Raspberry Pi Distribution is called Raspbian and is based on Debian.

http://www.raspberrypi.org/

Raspbian has good support for the popular Raspberry Pi hardware, but it lacks support for the onboard graphic accelerating capabilities for Xorg. 

Distros on Development Boards 

http://beagleboard.org/                                                Cortex A8 processor
Beaglebone black
Ubuntu 12.04, 13.04
Fedora 20 (headless only)

 
Ubuntu on http://pandaboard.org/                                Cortex A9 processor dual-core




Debian/Ubuntu on cheap consumer devices and boards        

Mele A1000/A2000(G) media player:                            Cortex A8 processor 
http://rhombus-tech.net/allwinner_a10/a10_image/

PC on a Stick and Mini PC’s:
PicUntu on RK3066 devices like MK808                       Cortex A9 processor dual-core
http://code.google.com/p/rk3066-linux/wiki/PicUntu        early release

Hackberry and Cubieboard
https://www.miniand.com/                                              Cortex A8 processor

OlinuXino
https://www.olimex.com/Products/OLinuXino/                Cortex A8 processor
https://www.olimex.com/Products/OLinuXino/A13/

Cubieboard                                                                       Cortex A8 processor
http://cubieboard.org/                                               available as single/dual core

Wandboard
http://www.wandboard.org/                                           Cortex A9 processor
available as  single/dual/quad core
Ubuntu 12.04
Archlinux ARM
Fedora 20 (headless only)

Udoo                                                                                   Cortex A9 processor
http://www.udoo.org/                                                available as dual/quad core
Ubuntu 12.04
Archlinux ARM

Utilite                                                                                    Cortex A9 processor
http://utilite-computer.com/web/home                     available as single/dual/quad core
Ubuntu 12.04  pre-installed
Archlinux ARM
Kali Linux
Debian
Android

Cubox-i                                                                                  Cortex A9 processor
http://cubox-i.com/                                                    available as single/dual/quad core
Ubuntu
Debian
Android

Matrix                                                                                    Cortex A9 processor
http://www.tbsdtv.com/launch/tbs-2910-matrix-arm-mini-pc.html         quad core
Ubuntu
Android

Radxa Rock                                                                          Cortex A9 processor
http://radxa.com                                                                      quad core
Ubuntu
Android

Ubuntu on Boards from Hardkernel
http://www.hardkernel.com/                                     Cortex A9,A15 processor quad-core 
Xubuntu 13.10
 

Ubuntu on the Samsumg Series 3 Chromebook      Cortex A15 processor dual-core

Ubuntu 12.10: (sound not working)
http://chromeos-cr48.blogspot.co.at/2012/10/arm-chrubuntu-1204-alpha-1-now.html 
http://www.phoronix.com/scan.php?page=news_item&px=MTI5Mzg 
Ubuntu 13.04:
http://marcin.juszkiewicz.com.pl/2013/02/14/how-to-install-ubuntu-13-04-on-chromebook/ 
Archlinux:
http://archlinuxarm.org/platforms/armv7/samsung-chromebook

Ubuntu on the HP Chromebook 11                          Cortex A15 processor dual-core
http://www.webupd8.org/2013/12/install-ubuntu-on-your-chromebook-using.html

Samsung Chromebook 2                                         Cortex A15 processor octa-core
http://www.amazon.com/gp/product/B00J49ZH1U/ref=as_li_ss_tl?ie=UTF8&camp=1789&tag=cbn0a-20&creative=390957&creativeASIN=B00J49ZH1U&linkCode=as2 

Ubuntu 14.04 on the Nvidia Jetson Tk1 board          Cortex A15 processor quad-core
https://developer.nvidia.com/jetson-tk1

 

*************************************************************************************

2015 Feb

https://code.google.com/p/rk3066-linux/wiki/PicUntu

http://linux-rockchip.info/mw/index.php?title=RK3188

**************************************************************************************

 

ARM Open Source & Optimization

ARM tool:                       Streamline analyzer / DS-5

http://ds.arm.com/ds-5/optimize/

 

Ne10:            Open Source Library based on Neon

http://projectne10.github.io/Ne10/

https://github.com/projectNe10/Ne10

http://community.arm.com/groups/android-community/blog/2013/10/28/ne10-a-new-open-source-library-to-accelerate-your-applications-with-neon

 

Liano

http://www.linaro.org/

 

FreeRtos

www.freertos.org/portcortexgcc.html

http://www.freertos.org/portcortexgcc.html

 

Yeppp:

http://www.yeppp.info/downloads.html

 

 

CoOS:

http://www.coocox.org/CoOS.htm

 

Mirror:

http://www.myir-tech.com/download.asp

 

Open Source RTOS

eCOS:

wget http://mirrors.kernel.org/sources.redhat.com/ecos/ecos-install.tcl

 

sh   ecos-install.tcl

 

FreeRTOS:

wget http://sourceforge.net/projects/freertos/files/latest

 

RT-Kernel

http://www.rt-thread.org/

 

 

RTEMS

Build Tools:

 http://www.rtems.org/wiki/index.php/RTEMS_Source_Builder

sudo apt-get install binutils gcc g++ gdb unzip git python2.7-dev

sudo apt-get install cvs

sudo apt-get install texinfo

cd ${HOME}

mkdir -p rtems/src

cd rtems/src

git clone git://git.rtems.org/rtems-source-builder.git

cd rtems-source-builder

source-builder/sb-check

cd rtems

../source-builder/sb-set-builder --list-bsets

../source-builder/sb-set-builder --log=l-arm.txt --prefix=$HOME/rtems/4.11 4.11/rtems-arm

ls $HOME/rtems/4.11

ls $HOME/rtems/4.11/bn

export PATH=$HOME/rtems/4.11/bin:$PATH

 

ftp://ftp.rtems.com/pub/rtems/

 

 

 

uCOS

http://micrium.com/

 

 

Android mount sdcard (again)

===>  execute_media_format
android/packages/apps/Settings/src/com/android/settings/MediaFormat.java

===>  mountService.formatVolume(extStoragePath);
android/frameworks/base/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java

====>  formatVolume
====>  doFormatVolume
android/frameworks/base/services/java/com/android/server/MountService.java

===> int CommandListener::VolumeCmd::runCommand
===> rc = vm->formatVolume(argv[2]);
android/system/vold/CommandListener.cpp

==> int VolumeManager::formatVolume
==> mVolumes = new VolumeCollection();
==> return v->formatVol()
android/system/vold/VolumeManager.h
android/system/vold/VolumeManager.cpp

===> int Volume::formatVol
===> Fat::format(devicePath, 0))
android/system/vold/Volume.cpp

===> int Fat::format(const char *fsPath, unsigned int numSectors)
===> static char MKDOSFS_PATH[] = “/system/bin/newfs_msdos”
android/system/vold/Fat.cpp

android/frameworks/base/services/java/com/android/server/NativeDaemonConnector.java

# C code
android/system/vold

# Launch sd formater in setting
adb shell
am start -n com.android.settings/.MediaFormat

##############################################################################

以下是打开“无线和网络设置”界面:

Intent intent = new Intent(“/”);
ComponentName cm = new ComponentName(“com.android.settings”,”com.android.settings.WirelessSettings”);
intent.setComponent(cm);
intent.setAction(“android.intent.action.VIEW”);
activity.startActivityForResult( intent , 0);

以下是可以直接打开的系统界面:

com.android.settings.AccessibilitySettings 辅助功能设置
com.android.settings.ActivityPicker 选择活动
com.android.settings.ApnSettings APN设置
com.android.settings.ApplicationSettings 应用程序设置
com.android.settings.BandMode 设置GSM/UMTS波段
com.android.settings.BatteryInfo 电池信息
com.android.settings.DateTimeSettings 日期和时间设置
com.android.settings.DateTimeSettingsSetupWizard 日期和时间设置
com.android.settings.DevelopmentSettings 应用程序设置=》开发设置
com.android.settings.DeviceAdminSettings 设备管理器
com.android.settings.DeviceInfoSettings 关于手机
com.android.settings.Display 显示——设置显示字体大小及预览
com.android.settings.DisplaySettings 显示设置
com.android.settings.DockSettings 底座设置
com.android.settings.IccLockSettings SIM卡锁定设置
com.android.settings.InstalledAppDetails 语言和键盘设置
com.android.settings.LanguageSettings 语言和键盘设置
com.android.settings.LocalePicker 选择手机语言
com.android.settings.LocalePickerInSetupWizard 选择手机语言
com.android.settings.ManageApplications 已下载(安装)软件列表
com.android.settings.MasterClear 恢复出厂设置
com.android.settings.MediaFormat 格式化手机闪存
com.android.settings.PhysicalKeyboardSettings 设置键盘
com.android.settings.PrivacySettings 隐私设置
com.android.settings.ProxySelector 代理设置
com.android.settings.RadioInfo 手机信息
com.android.settings.RunningServices 正在运行的程序(服务)
com.android.settings.SecuritySettings 位置和安全设置
com.android.settings.Settings 系统设置
com.android.settings.SettingsSafetyLegalActivity 安全信息
com.android.settings.SoundSettings 声音设置
com.android.settings.TestingSettings 测试——显示手机信息、电池信息、使用情况统计、Wifi information、服务信息
com.android.settings.TetherSettings 绑定与便携式热点
com.android.settings.TextToSpeechSettings 文字转语音设置
com.android.settings.UsageStats 使用情况统计
com.android.settings.UserDictionarySettings 用户词典
com.android.settings.VoiceInputOutputSettings 语音输入与输出设置
com.android.settings.WirelessSettings 无线和网络设置

##############################################################################
Generate SD Card Image file

#64G:
dd if=/dev/zero of=64G.img  count=0 seek=128M

#8G:
dd if=/dev/zero of=64G.img  count=0 seek=16M

#8G (with zero filled)
dd if=/dev/zero of=64G.img count=16M

##############################################################################
Loop device

#List loop devices:
losetup -a

#Add a loop device
losetup /dev/loop1 8G_zero.img

#Delete loop device
losetup -d /dev/loop1

find . -type f |xargs grep sd_format
find . -name *.java |xargs grep sd_format

###################################################################
Modify sd_format of android/packages/apps/Settings/res/values, impact on:

target R.java/Manifest.java: Settings (out/target/common/obj/APPS/Settings_intermediates/src/R.stamp)
target Java: Settings (out/target/common/obj/APPS/Settings_intermediates/classes)
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Copying: out/target/common/obj/APPS/Settings_intermediates/classes-jarjar.jar
Copying: out/target/common/obj/APPS/Settings_intermediates/emma_out/lib/classes-jarjar.jar
Copying: out/target/common/obj/APPS/Settings_intermediates/classes.jar
Copying: out/target/common/obj/APPS/Settings_intermediates/noproguard.classes.jar
target Dex: Settings
Copying: out/target/common/obj/APPS/Settings_intermediates/noproguard.classes.dex
target Package: Settings (out/target/product/generic/obj/APPS/Settings_intermediates/package.apk)
‘out/target/common/obj/APPS/Settings_intermediates/classes.dex’ as ‘classes.dex’…
Processing target/product/generic/obj/APPS/Settings_intermediates/package.apk
Done!
Install: out/target/product/generic/system/app/Settings.odex
Install: out/target/product/generic/system/app/Settings.apk
Finding NOTICE files: out/target/product/generic/obj/NOTICE_FILES/hash-timestamp
Combining NOTICE files: out/target/product/generic/obj/NOTICE.html
target Java: SettingsTests (out/target/common/obj/APPS/SettingsTests_intermediates/classes)
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Installed file list: out/target/product/generic/installed-files.txt
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img

******************************************************
SD FORMAT

==> StorageVolumePreferenceCategory
==> mAllowFormat = mStorageVolume != null && !mStorageVolume.isEmulated()
android/packages/apps/Settings/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java

SD Card Mount

=> “Preparing SD card”
=> “Damaged SD card”
==> ext_media_checking_notification_title
==> ext_media_unmountable_notification_title
frameworks/base/core/res/res/values/strings.xml
frameworks/base/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
===>MEDIA_UNMOUNTABLE

*****************************************************

#/system/etc/vold.fatab
#/system/etc/vold.conf

=>fatab
==>system/vold/main.cpp
===>process_config
====>VolumeManager
=====>system/vold/VolumeManager.cpp
=======>CommandListener
========>system/vold/CommandListener.cpp

********************************
FAT
===> system/vold/Fat.cpp
====> FSCK_MSDOS_PATH
=====> Fat::check
======>system/vold/Volume.cpp
=======>createDeviceNode
=========>Volume::mountVol
=========>DirectVolume::handleBlockEvent

Volume::mountVol
==> No impact on SDCard Mount, just for security fs

DirectVolume::handleBlockEvent
==>NetlinkEvent
===>system/core/include/sysutils/NetlinkEvent.h
=====>NetlinkEvent.mSubsystem==”block”, send to volume manage ==> DirectVolume::handleBlockEvent
======>NlActionAdd
========>system/core/libsysutils/src/NetlinkEvent.cpp

==========>system/core/libsysutils/src/NetlinkListener.cpp
==========>NetlinkListener::onDataAvailable

============>system/core/libsysutils/src/SocketListener.cpp
============>system/core/include/sysutils/NetlinkListener.h
============>class NetlinkListener : public SocketListener

***************************************************************************************
*** Triger of  NlActionAdd ***

“add”:
=>NetlinkEvent::parseAsciiNetlinkMessage,    system/core/libsysutils/src/NetlinkEvent.cpp
==>NetlinkEvent::decode
===>NetlinkListener::onDataAvailable,        system/core/libsysutils/src/NetlinkListener.cpp
====>SocketListener::runListener,            system/core/libsysutils/src/SocketListener.cpp
=====>SocketListener::threadStart,           system/core/libsysutils/src/SocketListener.cpp
======>SocketListener::startListener,        system/core/libsysutils/src/SocketListener.cpp
=======>main,                                system/vold/main.cpp
=======>NetlinkHandler::start,               system/vold/NetlinkHandler.cpp

*** Handle of NlActionAdd ***

“NlActionAdd”
=>DirectVolume::handleBlockEvent,            system/vold/DirectVolume.cpp
==>VolumeManager::handleBlockEvent,          system/vold/VolumeManager.cpp
==>NetlinkHandler::onEvent,                  system/vold/NetlinkHandler.cpp

**************************************************************************
Framework:   MountService

frameworks/base/services/java/com/android/server/SystemServer.java
=>public MountService(Context context),     frameworks/base/services/java/com/android/server/MountService.java
==>mContext.registerReceiver(mBroadcastReceiver, filter, null, null);
===>BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
====>action.equals(Intent.ACTION_BOOT_COMPLETED)
=====>if (state.equals(Environment.MEDIA_UNMOUNTED)) {
int rc = doMountVolume(path);
if (rc != StorageResultCode.OperationSucceeded) {
Slog.e(TAG, String.format(“Boot-time mount failed (%d)”,
rc));
}
======>private int doMountVolume(String path)
=======>mConnector.doCommand(String.format(“volume mount %s”, path));

==>mConnector = new NativeDaemonConnector
===>class NativeDaemonConnector,    frameworks/base/services/java/com/android/server/NativeDaemonConnector
====>public void run(),             frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
=====>listenToSocket,               frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
======>mCallbacks.onDaemonConnected();     (mCallbacks=MountService)
=======>onDaemonConnected()         frameworks/base/services/java/com/android/server/MountService.java

**********************************************************************************
Sd Card Mount Summary:

frameworks/base/services/java/com/android/server/MountService.java:
private int doMountVolume(String path):

Use case of doMountVolume

Case 1:  private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()
===> Boot up SD Card mount

Case 2:  public boolean onEvent(int code, String raw, String[] cooked)
===>frameworks/base/services/java/com/android/server/NativeDaemonConnector.java
===>Callback
===>public boolean handleMessage(Message msg)
===> SD Card Insert mount

Case 3: public int mountVolume(String path)
==> packages/apps/Settings/src/com/android/settings/deviceinfo/Memory.java
==> User Setting/Mount

Case 4: public int mountVolume(String path)
===> frameworks/base/core/java/com/android/internal/os/storage/ExternalStorageFormatter.java
===> Factory Reset

Binary Diff

bsdiff:                       http://www.daemonology.net/bsdiff/

Courgette:                http://www.chromium.org/developers/design-documents/software-updates-courgette

http://blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html

 

xdelta:                        http://code.google.com/p/xdelta/

rdiff:                            http://librsync.sourcefrog.net/

 

FW: Install nginx on Centos 6.x

http://www.cyberciti.biz/faq/install-nginx-centos-rhel-6-server-rpm-using-yum-command/

 

Step #1: Install nginx repo

# cd /tmp
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh
nginx-release-centos-6-0.el6.ngx.noarch.rpm

Step #2: Install nginx web-server

# yum install nginx

Step #3: Turn on nginx service

# chkconfig nginx on

How do I start / stop / restart nginx web-server?

# service nginx start
# service nginx stop
# service nginx restart
# service nginx status
# service nginx reload

Step #4: Configuration files

  1. Default configuration directory: /etc/nginx/
  2. Default SSL and vhost config directory: /etc/nginx/conf.d/
  3. Default log file directory: /var/log/nginx/
  4. Default document root directory: /usr/share/nginx/html
  5. Default configuration file: /etc/nginx/nginx.conf
  6. Default server access log file: /var/log/nginx/access.log
  7. Default server access log file: /var/log/nginx/error.log

To edit the nginx configuration file, enter:
# nano /etc/nginx/nginx.conf

Set or update worker_processes as follows (this must be set to CPU(s) in your system. Use the lscpu | grep ‘^CPU(s)’ command to list the number of CPUs in the server)

worker_processes  2;

Turn on gzip support:

gzip  on;

 

Edit the file /etc/nginx/conf.d/default.conf, enter:
# nano /etc/nginx/conf.d/default.conf
Set IP address and TCP port number:

    listen       199.241.137.179:80;

Set server name:

    server_name  vps.zhenglei.net;

 

Start the server:
# service nginx start
Verify that everything is working:
# netstat -tulpn | grep :80
# ps aux | grep nginx

Firewall configuration: Open TCP port # 80

Edit the file /etc/sysconfig/iptables, enter:
# nano /etc/sysconfig/iptables
Add the following lines, ensuring that they appear before the final LOG and DROP lines for the INPUT chain to open port 80:

 
-A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

Save and close the file. Finally, restart the firewall:
# service iptables restart

WNR2000V3 安装最新版DDWRT / Install latest ddwrt on wnr2000v3

软件内容: DDWRT 精简版本

适用硬件: Netgear wnr2000v3 / 4M flash 版本

Web 刷机方法:

步骤一:>

将WNR2000v3  固件降为上一版本原厂固件,重复操作直到版本1.0.x

Netgear 固件下载地址

步骤二:>

刷DDWRT factory image, r18777:

wnr2000v3-factory_WW.imgwnr2000v3-factory_NA.img

DDWRT 固件下载地址

步骤三:>

刷DDWRT 精简版:

DDWRT 精简版下载地址

*****************************************************************

ignore r24118 ,   seem’s dosen’t work on WNR2000V3

ignore r24461,    as it have  downgrade bug

 

Build exFAT fuse mode on ubuntu

 

sudo apt-get install subversion
sudo apt-get install scons
sudo apt-get install libfuse-dev
svn co http://exfat.googlecode.com/svn/trunk/ exfat-read-only
cd exfat-read-only/
scons
sudo scons install

Installed tool:
/sbin/dumpexfat
/sbin/exfatfsck
/sbin/exfatlabel
/sbin/fsck.exfat  -> exfatfsck
/sbin/mkexfatfs
/sbin/mkfs.exfat  -> mkexfatfs
/sbin/mount.exfat -> mount.exfat-fuse
/sbin/mount.exfat-fuse

Usage example:

/sbin/fsck.exfat       /dev/sdc1

/sbin/dumpexfat     /dev/sdc1

mkdir /tmp/exfat
sudo /sbin/mount.exfat /dev/sdc1 /tmp/exfat
mount | grep exfat
df   -a   /tmp/exfat
sudo umount    /tmp/exfat