我的第一个嵌入式Linux程序
2012年7月19日
1997年, 当我在Fremont完成Windows下的H.324视频电话后, ESS的工程师们问我下一步打算怎么把它移植到他们的DVD芯片上.
我说我打算先在他们芯片上移植一个嵌入式Linux. 他们于是开始教我怎么在不用任何操作系统的方式下实现VCD和DVD的各种功能, 并且让我相信视频电话也可以用相同方式实现.
我很幸运的没有继续参与在芯片上的软件工作. 由于H.324从未获得任何市场, 几年后ESS的视频电话产品以惨败结束.
不过, 我在ESS认识了王老板, 从此继续了不使用操作系统开发嵌入式应用的工作方式, 从PA1688到AR1688和PA6488.
时间一年年过得很快, 转眼到了2010年末, 我才第一次实际使用Linux编程工具. 当时我自己在Linux下成功编译了SDCC 3.0.0.
在给基于PA6488方案的产品寻找便宜的WiFi无线网络方案的过程中, 2周前我找了个机会在一个WiFi路由器芯片上实际编写程序.
考虑到硬件做到一起后有可能把音频处理工作从PA6488转移到路由器芯片上, 我选择了G.729测试序列做为在路由器芯片上我的第一个嵌入式Linux程序.
全部的G.729A和G.729AB编码测试序列加起来大约是112秒, 使用ITU-T原始软件编译运行, 路由器芯片使用了110秒完成全部编码工作. 在做了inline函数和打开循环等编译选项优化后降到了62秒.
在我打算进一步优化时, 发现我手头的编译器太老, 无法编译路由器芯片中支持的新的仿DSP方式工作指令集. 我发了封电子邮件询问新版本的编译工具问题, 不过近2周了一直没得到答复. 于是我不再等了, 开始写这个小结.
本来我想把这个小结分类在PA6488下, 后来改了主意. 考虑到以后真把PA6488和这个路由器芯片合在一起做产品的机会不大, 现在还是把它归类在我的个人编程娱乐类跟PHP放一起比较合适.
The truth is I never left you -- Don't Cry for Me Argentina
在腾讯云上安装PHP调试环境
2017年3月24日
不知道是不是被收购的原因, 最近从国内访问Yahoo的FTP服务器特别慢, 而且还经常被限制访问, 逼我被迫放弃自己用Visual C++写的Woody的网站工具, 转而使用Yahoo提供的WEB工具上传文件.
一下子修改测试华宝油气净值工具PHP代码的效率变得特别低, 让我苦恼无比.
这两天刚好读了篇有关云服务的文章, 让我想到了干脆自己弄个云服务器, 自己搭建一个PHP测试环境, 测试好的代码再上传Palmmicro.com.
国内阿里/新浪/腾讯这些提供云服务的巨头中, 平时使用腾讯的QQ最多, 就此上了腾讯云的贼船,
再次开始了痛苦的Linux学习过程. 这一次是从最基础的软件安装学习起.
还是一样, 好记性不如烂笔头, 在这里记录一下各种细节.
- 用腾讯云的系统镜像重装系统到CentOS 6.7 64位. 这个过程很快, 比以前在自己的机器上装ubuntu快太多了.
- 按https://www.biaodianfu.com/centos-6-7-install-amh-4-2.html中的步骤, root登录后运行yum update更新系统, 然后运行yum install wget安装wget.
- 执行wget http://amh.sh/file/AMH/4.2/amh.sh && chmod 775 amh.sh && ./amh.sh 2>&1 | tee amh.log安装AMH 4.2.
- http://139.199.173.16:8888进入AMH 4.2管理页面. 管理员账号admin. 为了记忆方便, 管理员密码使用跟MySQL同样的密码.
- 在虚拟主机页面新增虚拟主机, 主标识域名和绑定域名都填写139.199.173.16. 这一步完成后, 访问http://139.199.173.16就不再是403 bad request了. WEB文件根目录是/home/wwwroot/139.199.173.16/web/.
- 在FTP页面新增FTP账号admin, 密码依旧使用同一个. 这样我可以继续用自己的网站工具自动管理文件更新.
- 在模块扩展页面安装AMChroot, 然后进入管理模块, 把运行模式从安全模式改成兼容模式. 否则用curl访问https站点内容时会出Problem with the SSL CA cert错误.
重度拖延症患者的外部刺激治疗方案
2018年4月19日
腾讯云上的PHP调试环境安装好后用得并不多. 不过因为我一开始就懒于在它上面做用户界面, 而是只用命令行方式的测试,
无意中在微信公众号后又给了自己一个隔离数据和用户界面的机会, 调整了不少代码结构.
因为觉得它多少有点用, 当去年腾讯打着双11大促宣传买一年云服务打3折时, 一直在按月缴费的我马上去买了一年的服务. 而让我万万没有想到的是, 腾讯是分配给我了一个新的云服务器,
而不是像我想象的那样把老的续费一年.
理性的选择显然是马上去把老服务器的测试软件都搬到新服务器上去, 然后停用老的. 可是在我的重度拖延症影响下一直没有做这个工作, 就这样继续交着2台服务器的钱, 偶尔用用老的测试一下,
把新的置之不理一晃半年. 每个月底给老服务器续费74块的时候都要痛心疾首一番.
直到上周的时候腾讯给我的QQ邮箱发了一封信, 说4月20号要停止CentOS 6.7的官方镜像服务了, 我想到新服务器还没装它, 终于被刺激到了, 今天挽起袖子安装测试软件.
其实总共也没花几个小时, 事过境迁后总是难于理解当初的长达半年的拖延. 而结果尤其讽刺的是, 当我把新服务器的CentOS 6.7运行yum update后,
发现系统更新到了CentOS 6.9 -- 刚好是腾讯云官方镜像还继续支持的一个版本! 早知如此的话, 我还不知道会把这件事拖到什么时候.
又到腾讯云续费时间
2018年10月24日
大概2个月前, 平时偶尔做PHP测试的腾讯云突然罢工了, 给我出一堆PHP输出搞得我一筹莫展, 只好先把它扔一边.
Warning: file_put_contents(/home/wwwroot/111.230.12.222/web/debug/debug.txt): failed to open stream: Permission denied in /home/wwwroot/111.230.12.222/web/php/debug.php on line 103
最近腾讯开始各种渠道通知我又要缴费了, 还给了不少优惠券鼓励我续费. 搞得我很纠结, 其实我本来是想放弃这块的. 因为实在不知道怎么解决问题, 今天又硬着头皮重新装了一次系统, 安慰自己不要轻易放弃梦想.
梦想的代价: 1核CPU+1GB内存+1Mbps公网带宽, 1年费用打折后647.4元, 腾讯另外送了满600减300的折扣券, 实际支付347.4元.
2019年1月14日
由于免费动态域名palmmicro.ddns.us太难用, Palmmicro的测试IP-PBX已经罢工很久了.
最近有人找我测试SIP, 想起一直闲置的腾讯云其实是有个公网IP的, 于是开始尝试在它上面安装Asterisk.
以下步骤基本上都来自于官网WIKI, 附加一点自己搜索的疑难解决方法.
- cd /usr/local/src
- wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
- tar -zxvf asterisk-16-current.tar.gz
- cd asterisk-16.1.1
- ./configure 碰到的第一个问题: Please install the 'libedit' development package
- yum install libedit-devel
- ./configure uuid support not found (this typically means the uuid development package is missing)
- yum install libuuid-devel
- ./configure Please install the 'libjansson' development package or configure: *** use './configure --with-jansson-bundled
- cd /usr/local/src/ && wget http://www.digip.org/jansson/releases/jansson-2.11.tar.gz
- tar -zxf jansson-2.11.tar.gz
- cd jansson-2.11
- ./configure -prefix=/usr/local/ && make clean && make && make install && ldconfig
- cd /usr/local/src/asterisk-16.1.1
- ./configure Asterisk now uses SQLite3 for the internal Asterisk database
- yum install sqlite-devel
- make distclean
- ./configure
- cd contrib/scripts
- ./install_prereq install
- cd /usr/local/src/asterisk-16.1.1
- make menuselect
- make
- make install
- make basic-pbx
- make config
- make install-logrotate
- /etc/init.d/asterisk status
- /etc/init.d/asterisk start
账号和系统使用说明也来自于WIKI.
这么小心翼翼胆颤心惊折腾一趟下来, 感觉自己对Linux又多少熟悉了一点.