http://www.mondaiji.com/blog/other/it/10210-the-hunt-for-the-ultimate-free-open-source-nas-distro
http://linuxpluse.wordpress.com/2013/04/12/openmediavault-deluge-1-3-6/
原文:
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.
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 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
Liano
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
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
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
===> 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
http://www.cyberciti.biz/faq/install-nginx-centos-rhel-6-server-rpm-using-yum-command/
# cd /tmp
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpmnginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh
# yum install nginx
# chkconfig nginx on
# service nginx start
# service nginx stop
# service nginx restart
# service nginx status
# service nginx reload
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
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
刷DDWRT 精简版:
*****************************************************************
ignore r24118 , seem’s dosen’t work on WNR2000V3
ignore r24461, as it have downgrade bug
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