上传获取内核依赖项目的脚本

    百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
    博客输出站点(国内):http://weharmonyos.comhttp://8.134.122.205
    博客输出站点(国外):https://weharmony.github.io
    注解文件系统:https://gitee.com/weharmony/third_party_NuttX
    注解协议栈:https://gitee.com/weharmony/third_party_lwip
上级 e0c7c5ef
......@@ -64,7 +64,7 @@ typedef struct {
#define QUICKSTART_LISTEN _IOR(QUICKSTART_IOC_MAGIC, QS_LISTEN, QuickstartListenArgs)
#define QUICKSTART_STAGE(x) _IO(QUICKSTART_IOC_MAGIC, (x))
#define QUICKSTART_NODE "/dev/quickstart"
#define QUICKSTART_NODE "/dev/quickstart"
#define QS_STAGE_CNT (QS_STAGE_LIMIT - QS_STAGE1)
......
# EditorConfig is awesome: https://EditorConfig.org
# top-most EditorConfig file
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = crlf
charset = utf-8
trim_trailing_whitespace = false
insert_final_newline = false
\ No newline at end of file
### 精度内核源码,需其他项目源码配合,拉取 device 目录下代码,目录关系如下
# - device
# | - hisilicon
# | - qemu
# - kernel
# | - liteos_a
# - third_party
# | - lwip
# | - Nuttx
# | - ...
###
cd ../../../../
mkdir device
# hisilicon
git clone git@gitee.com:openharmony/device_hisilicon_build.git device/hisilicon/build
git clone git@gitee.com:openharmony/device_hisilicon_drivers.git device/hisilicon/drivers
git clone git@gitee.com:openharmony/device_hisilicon_hardware.git device/hisilicon/hardware
git clone git@gitee.com:openharmony/device_hisilicon_hispark_pegasus.git device/hisilicon/hispark_pegasus
git clone git@gitee.com:openharmony/device_hisilicon_hispark_taurus.git device/hisilicon/hispark_taurus
git clone git@gitee.com:openharmony/device_hisilicon_hispark_aries.git device/hisilicon/hispark_aries
git clone git@gitee.com:openharmony/security_itrustee_ree_lite.git device/hisilicon/itrustee/itrustee_ree_lite
git clone git@gitee.com:openharmony/device_hisilicon_modules.git device/hisilicon/modules
git clone git@gitee.com:openharmony/device_hisilicon_third_party_ffmpeg.git device/hisilicon/third_party/ffmpeg
git clone git@gitee.com:openharmony/device_hisilicon_third_party_uboot.git device/hisilicon/third_party/uboot
# qemu
git clone git@gitee.com:weharmony/device_qemu.git device/qemu
cd -
cd E:\\harmony\\third_party\\third_party_lwip
### 注解 third_party_lwip 源码
cd ../../../../third_party/lwip
#git fetch
git pull origin master
......
cd E:\\harmony\\third_party\\third_party_lwip
### 注解 third_party_lwip 源码
cd ../../../../third_party/lwip
git add -A
git commit -m 'lwip协议栈注解
......@@ -8,13 +9,5 @@ git commit -m 'lwip协议栈注解
'
git push git@gitee.com:weharmony/third_party_lwip.git master
#git push gitee_origin master
#git push github_origin master
#git push coding_origin master
#git remote add github_origin git@github.com:kuangyufei/kernel_liteos_a_note.git
#git remote add gitee_origin git@gitee.com:weharmony/kernel_liteos_a_note.git
#git remote add origin git@codechina.csdn.net:kuangyufei/kernel_liteos_a_note.git
#git remote add coding_origin git@e.coding.net:weharmony/harmony/kernel_liteos_a_note.git
cd -
\ No newline at end of file
cd E:\\harmony\\third_party\\third_party_NuttX
### 注解 third_party_NuttX 源码
cd ../../../../third_party/Nuttx
#git fetch
git pull origin master
......
cd E:\\harmony\\third_party\\third_party_NuttX
### 注解 third_party_NuttX 源码
cd ../../../../third_party/Nuttx
git add -A
git commit -m ' 块设备驱动,字符设备驱动注解
......@@ -6,15 +7,6 @@ git commit -m ' 块设备驱动,字符设备驱动注解
博客输出站点(国内):https://weharmonyos.com 或 http://8.134.122.205
博客输出站点(国外):https://weharmony.github.io
'
git push git@gitee.com:weharmony/third_party_NuttX.git master
#git push gitee_origin master
#git push github_origin master
#git push coding_origin master
#git remote add github_origin git@github.com:kuangyufei/kernel_liteos_a_note.git
#git remote add gitee_origin git@gitee.com:weharmony/kernel_liteos_a_note.git
#git remote add origin git@codechina.csdn.net:kuangyufei/kernel_liteos_a_note.git
#git remote add coding_origin git@e.coding.net:weharmony/harmony/kernel_liteos_a_note.git
cd -
\ No newline at end of file
git add -A
git commit -m ' 参考 http://weharmonyos.com 官方文档完善注解
git commit -m ' 上传获取内核依赖项目的脚本
百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
博客输出站点(国内):http://weharmonyos.com 或 http://8.134.122.205
博客输出站点(国外):https://weharmony.github.io
......
### 精度内核源码,需其他项目源码配合,拉取内核依赖的第三方代码,目录关系如下
# - device
# | - hisilicon
# | - qemu
# - kernel
# | - liteos_a
# - third_party
# | - lwip
# | - Nuttx
# | - ...
###
cd ../../../../
mkdir third_party
git clone git@gitee.com:weharmony/third_party_FatFs.git third_party/FatFs
git clone git@gitee.com:weharmony/third_party_FreeBSD.git third_party/FreeBSD
git clone git@gitee.com:weharmony/third_party_Linux_Kernel.git third_party/Linux_Kernel
git clone git@gitee.com:weharmony/third_party_lwip.git third_party/lwip
git clone git@gitee.com:weharmony/third_party_mtd_utils.git third_party/mtd-utils
git clone git@gitee.com:weharmony/third_party_musl.git third_party/musl
git clone git@gitee.com:weharmony/third_party_NuttX.git third_party/NuttX
git clone git@gitee.com:weharmony/third_party_zlib.git third_party/zlib
cd -
python ../../build/lite/build_ext_components.py --path=/harmony/kernel/liteos_a --prebuilts=sh\ build.sh\ hi3516dv300\ clang\ release --command=make\ clean\ OUTDIR=/harmony/out/ipcamera_hi3516dv300/obj/kernel/liteos_a\ \&\&\ make\ rootfs\ VERSION=\"OpenHarmony\ 1.0\"\ -j\ 16\ OUTDIR=/harmony/out/ipcamera_hi3516dv300/obj/kernel/liteos_a
\ No newline at end of file
#include <stdio.h>
#include <stdarg.h>
#include "turing.h"
LITE_OS_SEC_TEXT UINTPTR LOS_Align(UINTPTR addr, UINT32 boundary)
{
if ((addr + boundary - 1) > addr) {
return (addr + boundary - 1) & ~((UINTPTR)(boundary - 1));
} else {
return addr & ~((UINTPTR)(boundary - 1));
}
}
void b(){
UINT8 w[3]={0};
PTE_T pte1BasePtr = 0x11100000;
VADDR_T vaddr = 0x80738903;
PTE_T l1Entry = pte1BasePtr + vaddr >> MMU_DESCRIPTOR_L1_SMALL_SHIFT;
printf("pte1BasePtr ad: %x\n",&pte1BasePtr);
printf("w[1] ad: %x\n",&w[1]);
printf("vaddr: %x\n",(MMU_DESCRIPTOR_L1_SMALL_SIZE >> 12));
printf("l1Entry: %x\n",l1Entry);
printf("MMU_DESCRIPTOR_L1_SMALL_MASK:%x\n",MMU_DESCRIPTOR_L1_SMALL_MASK);
printf("MMU_DESCRIPTOR_L1_SMALL_FRAME:%x\n",MMU_DESCRIPTOR_L1_SMALL_FRAME);
printf("pa: %x\n",MMU_DESCRIPTOR_L1_SECTION_ADDR(l1Entry) + (vaddr & (MMU_DESCRIPTOR_L1_SMALL_SIZE - 1)));
}
void a(){
printf("BITMAP_BITS_PER_WORD %d\n",BITMAP_BITS_PER_WORD);
printf("BITMAP_NUM_WORDS %d\n",BITMAP_NUM_WORDS(1UL << 8));
}
void round1(){
int a = 0xFF;
//printf("a>> %d\n",a>>3);
//printf("a/ %d\n",a/8);
printf("ROUNDUP %d,%d,%d\n", ROUNDUP(7,4) ,ROUNDUP(8,4) ,ROUNDUP(9,4));
printf("ROUNDDOWN %d,%d,%d\n", ROUNDDOWN(7,4),ROUNDDOWN(8,4),ROUNDDOWN(9,4));
printf("ROUNDOFFSET %d,%d,%d\n", ROUNDOFFSET(7,4),ROUNDOFFSET(8,4),ROUNDOFFSET(9,4));
}
void arg_test(int i, ...)
{
int j=0,k=0;
va_list arg_ptr;
va_start(arg_ptr, i);
printf("&i = %p\n", &i);//打印参数i在堆栈中的地址
printf("arg_ptr = %p\n", arg_ptr);//打印va_start之后arg_ptr地址
printf("%d %d %d\n", i, j, k);
j=va_arg(arg_ptr, int);
printf("arg_ptr = %p\n", arg_ptr);//打印va_arg后arg_ptr的地址
printf("%d %d %d\n", i, j, k);
printf("arg_ptr = %p\n", arg_ptr);//打印va_arg后arg_ptr的地址
k=va_arg(arg_ptr, int);
printf("%d %d %d\n", i, j, k);
printf("arg_ptr = %p\n", arg_ptr);//打印va_arg后arg_ptr的地址
/*这时arg_ptr应该比参数i的地址高sizeof(int)个字节,即指向下一个参数的地址,如果已经是最后一个参数,arg_ptr会为NULL*/
va_end(arg_ptr);
printf("arg_ptr = %p\n", arg_ptr);//打印va_arg后arg_ptr的地址
printf("%d %d\n", i, j);
}
int main()
{
int size = 4097;
size = LOS_Align(size, PAGE_SIZE);//必须对齐
printf("sizeof(int) %d\n",size);
//round1();
//arg_test(99, 4,8,9);
//size = sizeof(LOS_DL_LIST) << OS_TSK_SORTLINK_LOGLEN;
//printf("LOS_DL_LIST %d\n",sizeof(LOS_DL_LIST *));
//printf("size %d\n",size);
return 0;
}
// gcc -o main main.c
//armv7-a clang (trunk)
#include <stdio.h>
#include <math.h>
int square(int a,int b){
return a*b;
}
int fp(int b)
{
int a = 1;
return square(a+b,a+b);
}
int main()
{
int sum = 1;
for(int a = 0;a < 100; a++){
sum = sum + fp(a);
}
return sum;
}
\ No newline at end of file
//编译器: armv7-a clang (trunk)
square(int, int):
sub sp, sp, #8 @sp减去8,意思为给square分配栈空间,只用2个栈空间完成计算
str r0, [sp, #4] @第一个参数入栈
str r1, [sp] @第二个参数入栈
ldr r1, [sp, #4] @取出第一个参数给r1
ldr r2, [sp] @取出第二个参数给r2
mul r0, r1, r2 @执行a*bR0,返回值的工作一直是交给R0
add sp, sp, #8 @函数执行完了,要释放申请的栈空间
bx lr @子程序返回,等同于mov pc,lr,即跳到调用处
fp(int):
push {r11, lr} @r11(fp)/lr入栈,保存调用者main的位置
mov r11, sp @r11用于保存sp,函数栈开始位置
sub sp, sp, #8 @sp减去8,意思为给fp分配栈空间,只用2个栈空间完成计算
str r0, [sp, #4] @先保存参数值,放在SP+4,此时r0中存放的是参数
mov r0, #1 @r0=1
str r0, [sp] @再把1也保存在SP的位置
ldr r0, [sp] @SP的值给R0
ldr r1, [sp, #4] @SP+4的值给R1
add r1, r0, r1 @执行r1=a+b
mov r0, r1 @r0=r1,r0,r1传参
bl square(int, int)@mov lr, pc mov pc square(int, int)
mov sp, r11 @函数执行完了,要释放申请的栈空间
pop {r11, lr} @弹出r11lr,lr是专用标签,弹出就自动复制给lr寄存器
bx lr @子程序返回,等同于mov pc,lr,即跳到调用处
main:
push {r11, lr} @r11(fp)/lr入栈,保存调用者的位置
mov r11, sp @r11用于保存sp,函数栈开始位置
sub sp, sp, #16 @sp减去8,意思为给main分配栈空间,只用2个栈空间完成计算
mov r0, #0 @初始化r0
str r0, [r11, #-4] @作用是保存SUM的初始值
str r0, [sp, #8] @sum将始终占用SP+8的位置
str r0, [sp, #4] @a将始终占用SP+4的位置
b .LBB1_1 @跳到循环开始位置
.LBB1_1: @循环开始位置入口
ldr r0, [sp, #4] @取出a的值给r0
cmp r0, #99 @99比较
bgt .LBB1_4 @大于99,跳出循环 mov pc .LBB1_4
b .LBB1_2 @继续循环,直接 mov pc .LBB1_2
.LBB1_2: @符合循环条件入口
ldr r0, [sp, #8] @取出sum的值给r0,sp+8用于写SUM的值
str r0, [sp] @先保存SUM的值,SP的位置用于读SUM
ldr r0, [sp, #4] @r0用于传参,取出A的值给r0作为fp的参数
bl fp(int) @mov lr, pcmov pc fp(int)
mov r1, r0 @fp的返回值为r0,保存到r1
ldr r0, [sp] @取出SUM的值
add r0, r0, r1 @计算新sum的值,R0保存
str r0, [sp, #8] @将新sum保存到SP+8的位置
b .LBB1_3 @无条件跳转,直接 mov pc .LBB1_3
.LBB1_3: @完成a++操作入口
ldr r0, [sp, #4] @SP+4中记录是a的值,赋给r0
add r0, r0, #1 @r0增加1
str r0, [sp, #4] @把新的a值放回SP+4里去
b .LBB1_1 @跳转到比较 a < 100
.LBB1_4: @循环结束入口
ldr r0, [sp, #8] @最后SUM的结果给R0,返回值的工作一直是交给R0
mov sp, r11 @函数执行完了,要释放申请的栈空间
pop {r11, lr} @弹出r11lr,lr是专用标签,弹出就自动复制给lr寄存器
bx lr @子程序返回,跳转到lr处等同于 MOV PC, LR
\ No newline at end of file
typedef unsigned int UINTPTR;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned int UINT32;
typedef unsigned long PTE_T;
typedef unsigned long VADDR_T;
#define IS_ALIGNED(a, b) (!(((UINTPTR)(a)) & (((UINTPTR)(b)) - 1)))
#define PAGE_SIZE (0x1000U) // 页大小4K
#define ROUNDUP(a, b) (((a) + ((b) - 1)) & ~((b) - 1))
#define ROUNDDOWN(a, b) ((a) & ~((b) - 1))
#define ROUNDOFFSET(a, b) ((a) & ((b) - 1))
#define MMU_DESCRIPTOR_L1_SMALL_SIZE 0x100000 //1M
#define MMU_DESCRIPTOR_L1_SMALL_MASK (MMU_DESCRIPTOR_L1_SMALL_SIZE - 1)
#define MMU_DESCRIPTOR_L1_SMALL_FRAME (~MMU_DESCRIPTOR_L1_SMALL_MASK)
#define MMU_DESCRIPTOR_L1_SMALL_SHIFT 20
#define MMU_DESCRIPTOR_L1_SECTION_ADDR(x) ((x) & MMU_DESCRIPTOR_L1_SMALL_FRAME)
#define OS_TSK_HIGH_BITS 3U
#define OS_TSK_LOW_BITS (32U - OS_TSK_HIGH_BITS) //29
#define OS_TSK_SORTLINK_LOGLEN OS_TSK_HIGH_BITS //3U
#define BITMAP_BITS_PER_WORD (sizeof(UINTPTR) * 8)
#define BITMAP_NUM_WORDS(x) (((x) + BITMAP_BITS_PER_WORD - 1) / BITMAP_BITS_PER_WORD)
#ifndef LITE_OS_SEC_TEXT
#define LITE_OS_SEC_TEXT /* __attribute__((section(".text.sram"))) */
#endif
typedef struct LOS_DL_LIST {
struct LOS_DL_LIST *pstPrev; /**< Current node's pointer to the previous node */
struct LOS_DL_LIST *pstNext; /**< Current node's pointer to the next node */
} LOS_DL_LIST;
//--------------------------------------------------------------------------------------------------------------------
#define HEAP_CAST(t, exp) ((t)(exp))
#define HEAP_ALIGN 4
#define HEAP_TAIL_NODE_SIZE_THRESHOLD 1024
#define ALIGNE(sz) (((sz) + HEAP_ALIGN - 1) & (~(HEAP_ALIGN - 1)))
#define OS_MEM_ALIGN(value, align) (((UINT32)(UINTPTR)(value) + (UINT32)((align) - 1)) & \
(~(UINT32)((align) - 1)))
#define OS_MEM_ALIGN_FLAG 0x80000000
#define OS_MEM_SET_ALIGN_FLAG(align) ((align) = ((align) | OS_MEM_ALIGN_FLAG))
#define OS_MEM_GET_ALIGN_FLAG(align) ((align) & OS_MEM_ALIGN_FLAG)
#define OS_MEM_GET_ALIGN_GAPSIZE(align) ((align) & (~OS_MEM_ALIGN_FLAG))
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册