注解
这并非是“微软公司”的面试题,而是稣想出来“让人微软”的题。
题目
1 |
|
运行后输出 17(二进制 10001 的十进制 17),解释一下?
解答(2023-01-17 新增)
返回值是个 Byte 呀!10001 是 0x2711,所以被截断为 0x11,那就是 17。即:
10001 mod 256 = 17
本题设置的陷阱正是“二进制 10001 的十进制等于 17”,误导人真有一套。
这并非是“微软公司”的面试题,而是稣想出来“让人微软”的题。
1 |
|
运行后输出 17(二进制 10001 的十进制 17),解释一下?
返回值是个 Byte 呀!10001 是 0x2711,所以被截断为 0x11,那就是 17。即:
10001 mod 256 = 17
本题设置的陷阱正是“二进制 10001 的十进制等于 17”,误导人真有一套。
刚刚刷好 OpenWRT 的 DIR-505,默认没有开启 WiFi,所以只能用网线连接,连起来后,将电脑的网卡配置为 192.168.1.X,或者自动获得地址也行。
默认也没有开启 SSH,只能用 telnet 192.168.1.1
来连,连上后改 root 密码:
1 | passwd root |
改好密码后,先不要关闭 telnet,因为一关闭,下次就连不上了。马上用 SSH 客户端(推荐使用 putty,文件复制、编辑则推荐 winscp)连一下路由器:
1 | ssh 192.168.1.1 |
如果连接失败,需要在 telnet 会话下开启 SSH 服务:
1 | /etc/init.d/dropbear enable |
用有线连接比较麻烦,接下来开启 WiFi,实现无线连接:
1 | uci set wireless.@wifi-device[0].disabled=0; |
时间都用网络同步,所以使用正确的时区很重要,要改为当地的时区,比如 UMU 使用台北时间:
1 | uci set system.@system[0].zonename='Asia/Taipei'; |
个性化,非必要:
1 | echo 'DIR-505' > /proc/sys/kernel/hostname; |
个性化,非必要:
1 | vi /etc/banner |
《#诗盗#·研究以及被研究》:贪官床下藏金砖,女侠床上治贪官。世间多少骑女纸,男骑女亦女骑男。
新闻《反腐女侠赵红霞》观后感。
《#诗盗#·豆芽炒黑木耳》:男屌爱撸豆芽细,女神爱日鲍鱼肥。岁月是把杀猪刀,香蕉微软木耳黑。
看了《跟hoowa学做智能路由》系列,也想写点自己的经验。
UMU 用的第一款硬件是 D-Link DIR-505。首先声明,UMU 不是 D-Link 员工,也不卖 DIR-505,用它完全是当下对比几个可选项筛选后的结果。理由:
本身就是不死 Bootloader,刷坏了固件用网线就可以救,把电脑 IP 设为 192.168.0.100,按住 Reset 开机,Web 浏览器访问 192.168.0.1。前面写的《不拆机给 D-Link DIR-505 刷上不死 U-Boot》完全是蛋疼地研究过程,对一般用户 UMU 建议不要刷,因为没有 JTAG,刷固件本来就不死,不小心刷坏 Bootloader,就只能拆机上编程器了,这明显作死。
配置比较高(相比 TP-Link 坑爹级同价位产品),8MB Flash,64MB RAM,UMU 手头上还有三个 TP 的(TL-WR841N、743N、941N)都只有它一半。有 USB 2.0 接口,743N 的 USB 是 1.1 的。
国内电商有得买,而且价格便宜,UMU 买的时候是 78 块。
小巧,方便携带,随时开撸!
也说一下它的缺点:没有外接天线,所以您懂的,信号必然比较弱,不适合“穿墙”族……然后 RJ45 口只有一个,有时候会不太方便。它最适合的使用场景是研究 OpenWRT、短距离和出差便捷使用。
请自行根据当下情况选择,毕竟新的硬件总是越来越强大,还越来越便宜。
接下来就刷个 OpenWRT 先~目前没有稳定发行版支持 DIR-505,所以要在 trunk 下找,下载目录是:http://downloads.openwrt.org/snapshots/trunk/ar71xx/。如果直接开刷,很可能失败,因为 D-Link 是有锁区的,OpenWRT.org 编译的 ROM 不是为中国版准备的,所以要动一下手脚先。上 WinHex 改 ROM,下面两张图分别是中国版和国际版:
两者只是图片指出的位置不同而已,可以自己改,如果把 OpenWRT 的 ROM 改为 CN 也无法在原厂 ROM 下刷成功的话,可以先找个官方的 DEF ROM 改为 CN,刷一下,再刷 OpenWRT 原版的 DEF ROM。
在上一篇《跟 UMU 一起玩 OpenWRT(高级篇1):编译不死 U-Boot》介绍了如何编译不死 U-Boot,但是不死 U-Boot 的作者只介绍了用 TTL 线刷方法,UMU 可不想拆机,毕竟拆机感觉并不好……
第一个思路是刷上 DD-WRT 固件,但是找了一下 DD-WRT 木有支持 DIR-505,只好继续蛋疼地编译 OpenWRT。
第一遍在虚拟机从 12:20 编译到 23:56,花费将近 12 小时……刚开始时,有一个下载过程,不断失败,想想是因为公司的网络太烂,于是把下载脚本改了一下:
<openwrt-svn-dir>/trunk/scripts/download.pl 中的 wget -t5 --timeout=20 --no-check-certificate
改为 wget -t5 --timeout=120 --no-check-certificate
第二天来,刷上,没问题,于是开始改代码去掉 U-Boot 写保护,参考这篇《Openwrt 中刷写 uboot ART》http://see.sl088.com/wiki/Openwrt_中刷写_uboot_art,但结果很不幸,型号不同嘛!
接下来,凭自己的编程水平了,尝试改 <openwrt-svn-dir>/trunk/target/linux/ar71xx/files/arch/mips/ath79/mach-dir-505-a1.c
,加入下面两个结构体:
1 | static struct mtd_partition dir505_partitions[] = { |
并将 dir_505_a1_setup 函数里的 ath79_register_m25p80(NULL);
改为 ath79_register_m25p80(&dir505_flash_data);
测试还是无效……看来必须在源头上使 MTD_WRITEABLE 无效掉,grep -r MTD_WRITEABLE <openwrt-svn-dir>/trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.10.36/drivers/mtd
,看到几处关键的地方:
1 | if (!(ubi->mtd->flags & MTD_WRITEABLE)) { |
和
1 | if (!mtd->_write || !(mtd->flags & MTD_WRITEABLE)) |
主要在 mtd_erase、mtd_write 等函数,很明显,C 语言不管在什么平台都是很好懂,看几眼就搞定了,原理是使 MTD_WRITEABLE 这个标志无用掉,您可以设置,但是我把判断这个标志的代码全干掉了,设了也是白设!
最后编译好的 openwrt-ar71xx-generic-dir-505-a1-squashfs-sysupgrade.bin
,用 sysupgrade 刷一下,reboot
后再用 mtd
刷不死 U-Boot,一切顺利,成功刷上不死 U-Boot!
《#诗盗#·某些节约是另一种浪费》:回扣肥水流,电器连连修。何物足堪用?好像是木有……
有些公司买一些洋乐射给员工用,以为可以节约成本,结果连连坏掉,反复修乐射的时间难道不是成本?再认真想想,公司有什么东西称心好用的?好像没有!
UMU 2010 年初就玩 OpenWRT/DD-WRT 了,蛋似编译东西还是初学者,本文纯属蛋疼的过程,欢迎批评教育,谢谢……
首先到 https://github.com/pepe2k/u-boot_mod 看明白作者的说明。这里简单说一下原理:固件(firmware)刷坏,但 U-Boot 没坏,这是半砖,可以用 TTL 线连路由器,通过 U-Boot 的功能刷好 firmware。如果两者都坏了,叫全砖,只能把 Flash 拆下来,用编程器刷好 U-Boot 和 firmware。不死 U-Boot 就是修改了 U-Boot 的实现,使我们可以用 RJ-45 网线来救砖,省去拆机搭 TTL 线的麻烦。
本质上说,这东西并非真的不死,只要 U-Boot 被刷坏,还是会死,不过几率不大,因为 OpenWRT 官方发行的 ROM 全都是保护 U-Boot 区域的,根据 UMU 的经验,只有三个情况会不小心或故意刷坏:
如果您真的这么蛋疼,还是准备编程器吧,只要是软件问题,在编程器面前没有砖的概念。(JTAG 也是救砖神器,但不是每台路由器都有,比如 DIR-505 就没有!)
由于 UMU 是 Windows 程序员,平时没有安装 Linux 桌面的习惯,蛋似由于做快游项目,买了不少服务器,都是 CentOS,所以第一步就是在 CentOS 上尝试编译,后来,您们懂的,爆出各种 213 码!服务器系统还是不适合开发!
不得已就在 Hyper-V Server 2012 上安装了 Ubuntu 12.04.1-desktop-i386,本来是想安装 x64 版本的,但又怕这些嵌入式的东西对 x64 可能支持不够好,算了,不要装 13 了。
接下来是选择编译环境了,按照 UMU 对 OpenWRT 的好感,明显是选择 OpenWrt Toolchain for AR71xx MIPS,然后开始编译,哗哗哗,编译好了……最后编译出来的 bin 却是 64KB+110B,尼玛,这 size 超标了,刷进去不是不死,是立刻死!
试验 Sourcery CodeBench Lite Edition for MIPS GNU/Linux 可行。推测作者其实并没有用 OpenWrt Toolchain 编译过,而是用 Sourcery CodeBench,所以……为了节省时间,还是用后者吧!吐槽一下,这是商业软件,虽然有免费的 Lite 版本……
make dlink_dir505 一下,顺利编译出来,UMU 还小修改了一下 Web 界面,加入了自己的特色,不过要提醒一下,不要加太多,会爆……只有 64KB 的空间!
从 Win7 到 Win8,部分 WiFi 属性被隐藏掉了,在图形界面上看不到……只好用命令行了:
1 | netsh wlan show networks mode=bssid |
OpenWRT 上是:
1 | iw dev wlan0 scan |
《#诗盗#·RTX2》:性浪微博压腾讯,微云不如百毒云。美拍强势日微视,山寨帝国有点逊。
性浪微博压腾讯,
微云不如百毒云。
美拍强势日微视,
山寨帝国囧又逊。
RTX:腾讯的一套办公聊天软件,但这里是“日腾讯”的意思。之前用过这个标题,所以加个 2。
人无完人,腾讯也不是抄啥都能抄成的!