找回密码
 立即注册
img_loading
智能检测中

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
查看: 15761|回复: 22

padavan固件启动过程分析

  [复制链接]
发表于 2016-4-2 11:22 | 显示全部楼层 |阅读模式
Linux系统启动过程会执行一个/sbin/init的文件,这个文件然后往后引导,一步一步执行你需要自启动的其他脚本
[newifi_mini /sbin]# pwd
/sbin
[newifi_mini /sbin]# ls -al init
lrwxrwxrwx    1 admin    root             2 Mar 20 20:08 init -> rc

看到init是link到rc文件的,去源代码中找到
trunk/user/rc
vi rc.c

void
write_storage_to_mtd(void)
{
        doSystem("/sbin/mtd_storage.sh %s", "save");
}



        // system ready
        system("/etc/storage/started_script.sh &");

可以看到系统重启的过程,rc会执行mtd_storage.sh  save
同时还会执行 started_scripts.sh

另外,还有一个文件/sbin/dev_init.sh脚本也会启动的时候执行,分析init.c文件也可以看到
#if BOARD_RAM_SIZE > 32
        system("dev_init.sh");
#else

        system("dev_init.sh -l");
在实际的二进制文件中分析,也可以看到调用了dev_init.sh的
[newifi_mini /]# strings  sbin/rc  |grep dev_init
dev_init.sh

实际上,mtd_storage.sh脚本是从这里开始调用的。
[newifi_mini /sbin]# cat /sbin/dev_init.sh
#!/bin/sh

mount -t proc proc /proc
mount -t sysfs sysfs /sys
[ -d /proc/bus/usb ] && mount -t usbfs usbfs /proc/bus/usb

size_tmp="24M"
size_var="4M"
if [ "$1" == "-l" ] ; then
  size_tmp="8M"
  size_var="1M"
fi

mount -t tmpfs tmpfs /dev   -o size=8K
mount -t tmpfs tmpfs /etc   -o size=2M,noatime
mount -t tmpfs tmpfs /home  -o size=1M
mount -t tmpfs tmpfs /media -o size=8K
mount -t tmpfs tmpfs /mnt   -o size=8K
mount -t tmpfs tmpfs /tmp   -o size=$size_tmp
mount -t tmpfs tmpfs /var   -o size=$size_var

mkdir /dev/pts
mount -t devpts devpts /dev/pts

mdev -s

# create dirs
mkdir -p -m 777 "/var/lock"
mkdir -p -m 777 "/var/locks"
mkdir -p -m 777 "/var/private"
mkdir -p -m 700 "/var/empty"
mkdir -p -m 777 "/var/lib"
mkdir -p -m 777 "/var/log"
mkdir -p -m 777 "/var/run"
mkdir -p -m 777 "/var/tmp"
mkdir -p -m 777 "/var/spool"
mkdir -p -m 777 "/var/lib/misc"
mkdir -p -m 777 "/var/state"
mkdir -p -m 777 "/var/state/parport"
mkdir -p -m 777 "/var/state/parport/svr_statue"
mkdir -p -m 777 "/tmp/var"
mkdir -p -m 777 "/tmp/hashes"
mkdir -p -m 777 "/tmp/modem"
mkdir -p -m 777 "/tmp/rc_notification"
mkdir -p -m 777 "/tmp/rc_action_incomplete"
mkdir -p -m 700 "/home/root"
mkdir -p -m 700 "/home/root/.ssh"
mkdir -p -m 755 "/etc/storage"
mkdir -p -m 755 "/etc/ssl"
mkdir -p -m 755 "/etc/Wireless"
mkdir -p -m 750 "/etc/Wireless/RT2860"
mkdir -p -m 750 "/etc/Wireless/iNIC"
mkdir -p -m 777 "/etc/storage/lib"

# extract storage files
mtd_storage.sh load

touch "/etc/resolv.conf"
cp -f "/etc_ro/ld.so.cache" "/etc"

if [ -f "/etc_ro/openssl.cnf" ]; then
  cp -f "/etc_ro/openssl.cnf" "/etc/ssl"
fi

# create symlinks
ln -sf "/home/root" "/home/admin"
ln -sf "/proc/mounts" "/etc/mtab"
ln -sf "/etc_ro/ethertypes" "/etc/ethertypes"
ln -sf "/etc_ro/protocols" "/etc/protocols"
ln -sf "/etc_ro/services" "/etc/services"
ln -sf "/etc_ro/shells" "/etc/shells"
ln -sf "/etc_ro/profile" "/etc/profile"
ln -sf "/etc_ro/e2fsck.conf" "/etc/e2fsck.conf"
ln -sf "/etc_ro/ipkg.conf" "/etc/ipkg.conf"
ln -sf "/etc_ro/ld.so.conf" "/etc/ld.so.conf"
ln -sf "/etc_ro/libgcc_s.so.1" "/etc/storage/lib/libgcc_s.so.1"
ln -sf "/etc/storage/PhMain.ini" "/etc/PhMain.ini"
ln -sf "/etc/storage/init.status" "/etc/init.status"

# tune linux kernel
echo 65536        > /proc/sys/fs/file-max
echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range

# fill storage
mtd_storage.sh fill

# prepare ssh authorized_keys
if [ -f /etc/storage/authorized_keys ] ; then
  cp -f /etc/storage/authorized_keys /home/root/.ssh
  chmod 600 /home/root/.ssh/authorized_keys
fi

# perform start script
if [ -x /etc/storage/start_script.sh ] ; then
  /etc/storage/start_script.sh
fi



我们去打开mtd_storage.sh看看
#!/bin/sh

result=0
mtd_part_name="Storage"
mtd_part_dev="/dev/mtdblock5"
mtd_part_size=65536
dir_storage="/etc/storage"
slk="/tmp/.storage_locked"
tmp="/tmp/storage.tar"
tbz="${tmp}.bz2"
hsh="/tmp/hashes/storage_md5"
config_qos="/etc/storage/qos.conf"
script0_script="/etc/storage/script0_script.sh"
script_script="/etc/storage/script_script.sh"
script1_script="/etc/storage/script1_script.sh"
script2_script="/etc/storage/script2_script.sh"
script3_script="/etc/storage/script3_script.sh"
adbyby_rules_script="/etc/storage/adbyby_rules_script.sh"
FastDick_script="/etc/storage/FastDick_script.sh"
crontabs_script="/etc/storage/crontabs_script.sh"
kmskey="/etc/storage/key"
vlmcsdini_script="/etc/storage/vlmcsdini_script.sh"


func_load()               
{                     
        local fsz
                             
        bzcat $mtd_part_dev > $tmp 2>/dev/null
        fsz=`stat -c %s $tmp 2>/dev/null`      
        if [ -n "$fsz" ] && [ $fsz -gt 0 ] ; then
                md5sum $tmp > $hsh            

可以看到实际上这个storage数据是压缩写入在/dev/mtdblock5上的,这个设备应该是固件写入的时候对flash的一个分区。
看到没?  所有其他相关脚本都是从这个mtd_storage.sh启动的。

到此分析完毕。

因为padavan启动起来是一个readonly的系统,只有tmp可以写入数据,但是tmp重启就消失了。如果要自己加入一些启动的脚本,可以考虑如何改变/etc/storage下的内容,然后保存到flash上去就可以了。


对于我一个不会写程序的人来说,分析到这里,我认为已经算是很努力了。在前人的基础上,我可以任意添加和修改firmware了。

感谢各位大神对padavan的不懈努力修改!

评分

参与人数 4恩山币 +10 收起 理由
potomac + 1 面对这种帖子,我内心复杂,真不知道说什么好……
zshwq5 + 3 我来恩山就是为了看你!
烟屁股 + 1 技术贴要顶,还要加分!
laoma348 + 5 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~

查看全部评分

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2016-4-2 17:21 | 显示全部楼层
不错,现在喜欢折腾的越来越少了。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-2 23:01 | 显示全部楼层
呵呵,瞎折腾而已。 这种分析帖子远没有发固件看的人多。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2016-4-17 11:14 | 显示全部楼层
不会写程序,能分析到这种地步,楼主也真是神人啊
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2016-7-8 16:51 来自手机 | 显示全部楼层
本帖最后由 dsqaa 于 2016-7-8 16:56 编辑

顶一下。大神、牛人很多,但像楼主这样能分享有用的东西的人很少,特别是一些关键的东西,没人愿意告诉别人,不是叼的不行,就是不理人,生怕别人学到了,捂得严严实实,当然了人家自己写的代码,不公开,也合情合理,但用人家开源代码的,这样的可以鄙视下。楼主的分享精神可嘉,所以必须赞楼主一个!如果当初没有这种精神,也就没有linux。。。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2016-7-8 19:03 | 显示全部楼层
是的,然后你还可以在mtd_storage.sh里面加东西,例如生成自己的脚本
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2016-9-9 23:15 来自手机 | 显示全部楼层
楼主  我想请问下 根目录的/usr 不可写应该怎么改可写入啊
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2016-9-11 16:58 | 显示全部楼层
可以再mtd_storage.sh里面加  赋予权限的语句吗
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2016-9-11 17:20 来自手机 | 显示全部楼层
厉害了我的哥。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2016-9-14 14:47 | 显示全部楼层
还有一个,装了OPT之后,可以在u盘的
/opt/etc/init.d 目录里添加你要执行的脚本
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-4-1 01:04 来自手机 | 显示全部楼层
厉害,没想到啊
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-4-1 09:28 | 显示全部楼层
厉害了word哥。。。。。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-4-1 16:27 | 显示全部楼层
能不能再分析一下 ss 的几个过程,谢谢
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-4-1 17:31 | 显示全部楼层
6666666楼主分析的很到位啊 我略微看懂了
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2017-4-5 21:12 | 显示全部楼层
赞一个,纯技术贴越来越少了!
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛

只谈技术、莫论政事!切勿转播谣言!为了你也为了他人。
只谈技术、莫论政事!(点击见详情) 切记不要随意传播谣言,把自己的日子过安稳了就行,为了自己好也为了大家好。 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。

查看 »

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2025-6-26 17:56

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表