ps: linux 無法登入ssh
1.檢查linux下sshd 服務 ps -e | grep ssh*
2.重啟服務 service /etc/ssh restart
3.ufw disbale 關閉防火牆
struct kset:
struct kset ;
struct kset_uevent_ops ;
操作函式
//初始化kset_init
extern
void kset_init(struct kset *kset);
//註冊kset
int kset_register(struct kset *k)
kset_init(k); //初始化
err = kobject_add_internal(&k->kobj);//建立目錄
kobject_uevent(&k->kobj, kobj_add); // 如果設定 config_hotplug ,將向核心傳送事件通知使用者空間
熱插拔過程分析
//注意: kobject物件要支援熱插拔必須要有它的容器kset,孤立的kobject是無法支援熱插拔的
int kobject_uevent(struct kobject *kobj, enum kobject_action action)
kobject_uevent_env(kobj, action, null);
//找到頂層的kset
top_kobj = kobj;
while (!top_kobj->kset && top_kobj->parent)
top_kobj = top_kobj->parent;
//獲得頂層的kset的uevent_ops
kset = top_kobj->kset;
uevent_ops = kset->uevent_ops;
//事件是否被頂層過濾
uevent_ops->filter(kset, kobj)
subsystem = uevent_ops->name(kset, kobj);
//準備傳送使用者空間的訊息
env = kzalloc(sizeof(struct kobj_uevent_env), gfp_kernel);
retval = add_uevent_var(env, "action=%s", action_string);
retval = uevent_ops->uevent(kset, kobj, env);
#if defined(config_net)
//傳送 netlink
retval = netlink_broadcast_filtered(uevent_sock, skb,
0, 1, gfp_kernel,
kobj_bcast_filter,
kobj);
#else
//call_usermodehelper
核心:
#include
#include
#include
#include
static
struct kobject * parent = null;
static
struct kobject * child = null;
static
struct kset * p_kset =null;
static
struct attribute child_attr = ;
static ssize_t attr_show(struct kobject *kobj, struct attribute *attr,char *buf)
static ssize_t attr_store (struct kobject *kobj,struct attribute *attr,const
char *buf, size_t count)
return count;
}static
struct sysfs_ops attr_ops =;
static
struct kobj_type attr_ktype=;
static
int __init kobject_test_init(void)
static
void __exit kobject_test_exit(void)
module_init(kobject_test_init);
module_exit(kobject_test_exit);
module_author("derrick email: [email protected]");
module_license("gpl v2");
module_description("kobject test module");
module_alias("kobject test module");
使用者空間:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define netlink_test 21
#define max_payload 1024
int main(int argc, char* argv)
bind(pfd.fd,(void *)&nls,sizeof(struct sockaddr_nl));
while(-1!=poll(&pfd,1,-1))
i=0;
while(iprintf("%s\n",buf+i);
i+=strlen(buf+i)+1;}}
printf("poll error\r\n");
return0;}
test:
#....# echo '1' > /sys/pa_obj/pb_obj/child_attr
attr_store
buf[0] = 0x31
flag= 1remove@/pa_obj/pb_obj
action=remove
devpath=/pa_obj/pb_obj
subsystem=p_kset
seqnum=1536
# echo '0' > /sys/pa_obj/pb_obj/child_attr
attr_store
buf[0] = 0x30
flag= 0add@/pa_obj/pb_obj
action=add
devpath=/pa_obj/pb_obj
subsystem=p_kset
seqnum=1537
體會: netlink sys 這兩種都可以使用者空間和核心空間交換資料
linux裝置驅動模型之 kset原理與例項分析
1 kset kset是具有相同型別的kobject的集合,在sysfs中體現成乙個目錄,在核心中用kset資料結構表示,定義為 2 kset操作 1 int kset register struct kset kset 在核心中註冊乙個kset 2 void kset unregister str...
servlet容器與Apache容器的區別
兩者的定位 apache是http web伺服器,tomcat是web伺服器 兩者的區別 1 apache是世界上最流行的web伺服器 其次是微軟的iis 可以處理http請求,預設埠是80 tomcat是執行在apache上的應用伺服器,它是乙個servlet容器,也可以單獨執行的。2 apach...
順序容器與關聯容器的不同
想要理解關聯容器與順序容器的不同,最關鍵的是理解其基礎的資料結構,這樣就很自然的理解它所表現出來的性質。兩類容器的根本差別在於,順序容器中的元素是 順序 儲存的 鍊錶容器中的元素雖然不是在記憶體中 連續 儲存的,但仍然是按 順序 儲存的 理解順序的關鍵,是理解容器支援的操作形式以及效率。對vecto...