再学习Linux的系统编程,主要是文件操作,文件描述符fd,对文件的操作write,read,open.close等,然后学习进程fork()vfork()创建进程和管理父子进程,进程之间的通信无名管道、命名管道、消息队列、共享内存、信号量、套接字等;都掌握之后要学线程以及线程的互斥和同步,线程之间共享进程的资源,就要对资源进行合理的分配,例如信号量sem和线程互斥锁pthread_mutex,信号是用来检测信号的ISGNAL的,常见的信号例如ctrl+c,中断前台的进程和kill中断后台的进程,如果对网络感兴趣,可以学习下Linux的网络套接子Socket,实现多台主机之间进程的通信,例如QQ和IPMSG都是对网络套接字的操作,熟悉一下TCP、UDP协议和TFTP、HTTP的网络层的传输协议,个人觉得解析buff最费时间,可以自己做一下IPMSG,单用户和并发server,echo服务器。
感兴趣GUI的可以学习一下C++和Qt,Qt被nokia收购,nokia被微软收购,Qt支持很多的平台,很实用,C++主要是对类的操作,和C中的结构体相似,class 类名{};// 声明类class 类名:继承方式 基类{};//继承类类中包含私有成员、公有成员、受保护的成员,类是对事物共性的一种抽象,对象是共性的一种实体化,是类的一个实例,老师的共性是:教书,吃饭,睡觉等,可以抽象成一个类,个性是年龄、性别、名字等,是老师类的一个实例,C++还有很多的内容,Qt是用C++来写的,其中的窗口都是派生于QWidget的,具体的不多说了。
学完C++和Qt,有了面向对象的概念后,可以去学Java和android系统,做手机的应用软件和游戏开发,和Java 和C++类似,去掉c++中指针部分,完全脱离了内存的操作,完全的面向对象,android和Qt类似,具体内容不多说了。
说说底层的吧:
底层主要用到的是C语言和arm汇编主要是v4版本以后的汇编标准语言,首先清楚底层是怎么引导Linux系统的,嵌入式很大一部分使用缩减版的Linux内核主要是稳定版本的,千万不要去追求最新,最适合的才是最好的,前部分由汇编语言引导C语言,主要设置开发板软硬件的环境,主要是bootloader(vivi、uboot.bin),然后把设置好的param参数传给内核,内核调用这些参数去找相应的文件,进行相应的操作,然后就是Linux的根文件系统了,最后是软件的移植。
用到的软件:vmplayer (Linux redenterp版)、windows下的超级终端,LSJF24X0.exe(下载bootloader时使用,也可以用H-Jtag)、tftpd32.exe(做windows下的server用,用于u-boot网线下载)等工具。
以上是个人的体会,仅供参考!
解决方案1. 备份 SEPM 服务器注册表。
2. 将附录部分的注册表导出信息保存为 *.reg 文件。
注意: 如果SEPM安装在默认路径之外,请注意修改
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\Parameters]
中的 SEPM 安装路径为实际安装路径。
3. 双击 reg 文件导入注册表文件。
4. 完成后运行 regedit 打开注册表,确认
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5] 项已经导入。
注意: 如果 SEPM 安装在默认路径之外,请注意修改
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\ImagePath]
为实际的 SEPM 安装路径。
5. 重新启动服务器操作系统,确认 Symantec Embedded Database 服务启动正常。
附录
将以下内容粘贴入记事本,并保存为 .reg 文件: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5]
"Type"=dword:00000010
"Start"=dword:00000002
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):43,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,\
20,00,46,00,69,00,6c,00,65,00,73,00,5c,00,53,00,79,00,6d,00,61,00,6e,00,74,\
00,65,00,63,00,5c,00,53,00,79,00,6d,00,61,00,6e,00,74,00,65,00,63,00,20,00,\
45,00,6e,00,64,00,70,00,6f,00,69,00,6e,00,74,00,20,00,50,00,72,00,6f,00,74,\
00,65,00,63,00,74,00,69,00,6f,00,6e,00,20,00,4d,00,61,00,6e,00,61,00,67,00,\
65,00,72,00,5c,00,41,00,53,00,41,00,5c,00,77,00,69,00,6e,00,33,00,32,00,5c,\
00,64,00,62,00,73,00,72,00,76,00,39,00,2e,00,65,00,78,00,65,00,20,00,2d,00,\
68,00,76,00,41,00,53,00,41,00,4e,00,59,00,73,00,5f,00,73,00,65,00,6d,00,35,\
00,00,00
"DisplayName"="Symantec Embedded Database"
"Group"="ASANYServer"
"ObjectName"="LocalSystem"
"Description"="Embedded database used by Symantec Endpoint Protection Manager."
"FailureActions"=hex:80,51,01,00,00,00,00,00,00,00,00,00,03,00,00,00,53,00,65,\
00,01,00,00,00,10,27,00,00,01,00,00,00,10,27,00,00,01,00,00,00,10,27,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\Parameters]
"arameters"="-c 64m -ch 64m -gp 8192 -gc 30 -gr 30 -o \"C:\\Program Files\\Symantec\\
Symantec Endpoint Protection Manager\\db\\out.log\" -oe \"C:\\Program Files\\Symantec\\
Symantec Endpoint Protection Manager\\db\\err.log\" -os 1m -gn 80 -n SPC_jl-w2k3-en3 \
"C:\\Program Files\\Symantec\\Symantec Endpoint Protection Manager\\db\\sem5.db\
" -n sem5 -sb 0 -x tcpip(localonly=yesport=263"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\Security]
"Security"=hex:01,00,14,80,b8,00,00,00,c4,00,00,00,14,00,00,00,30,00,00,00,02,\
00,1c,00,01,00,00,00,02,80,14,00,ff,01,0f,00,01,01,00,00,00,00,00,01,00,00,\
00,00,02,00,88,00,06,00,00,00,00,00,14,00,fd,01,02,00,01,01,00,00,00,00,00,\
05,12,00,00,00,00,00,18,00,ff,01,0f,00,01,02,00,00,00,00,00,05,20,00,00,00,\
20,02,00,00,00,00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,04,00,00,00,00,\
00,14,00,8d,01,02,00,01,01,00,00,00,00,00,05,06,00,00,00,00,00,14,00,00,01,\
00,00,01,01,00,00,00,00,00,05,0b,00,00,00,00,00,18,00,fd,01,02,00,01,02,00,\
00,00,00,00,05,20,00,00,00,23,02,00,00,01,01,00,00,00,00,00,05,12,00,00,00,\
01,01,00,00,00,00,00,05,12,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ASANYs_sem5\Enum]
"0"="Root\\LEGACY_ASANYS_SEM5\\0000"
"Count"=dword:00000001
"NextInstance"=dword:00000001
OSSemPost()结束前会引发一次调度OS_Sched(),选择就绪表中优先级最高的任务运行,如果任务1的优先级高,会运行任务1,实时操作系统的任务都会被及时运行void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr
#endif
if (OSIntNesting >0) { /* See if called from ISR ...*/
*err = OS_ERR_PEND_ISR /* ... can't PEND from an ISR*/
return
}
#if OS_ARG_CHK_EN >0
if (pevent == (OS_EVENT *)0) {/* Validate 'pevent' */
*err = OS_ERR_PEVENT_NULL
return
}
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */
*err = OS_ERR_EVENT_TYPE
return
}
#endif
OS_ENTER_CRITICAL()
if (pevent->OSEventCnt >0) { /* If sem. is positive, resource available ... */
pevent->OSEventCnt--/* ... decrement semaphore only if positive. */
OS_EXIT_CRITICAL()
*err = OS_NO_ERR
return
}
/* Otherwise, must wait until event occurs */
OSTCBCur->OSTCBStat |= OS_STAT_SEM /* Resource not available, pend on semaphore */
OSTCBCur->OSTCBDly = timeout /* Store pend timeout in TCB */
OS_EventTaskWait(pevent)/* Suspend task until event or timeout occurs*/
OS_EXIT_CRITICAL()
OS_Sched() /* Find next highest priority task ready */
OS_ENTER_CRITICAL()
if (OSTCBCur->OSTCBStat &OS_STAT_SEM) { /* Must have timed out if still waiting for event*/
OS_EventTO(pevent)
OS_EXIT_CRITICAL()
*err = OS_TIMEOUT /* Indicate that didn't get event within TO */
return
}
OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0
OS_EXIT_CRITICAL()
*err = OS_NO_ERR
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)